Reputation: 35
I'm still trying to get acquainted with Tiles, I've used it before in Struts 1.x without any problems but that's not the case with Spring MVC. With Struts I'm aware that you have to create actions or use its forward tag to get to a page defined in tiles via a link, I assumed that with Spring you would similarly need to use a controller. But, it doesn't seem to be finding my tiles definitions since whenever the controller executes I get this error:
Jul 17, 2014 11:21:07 AM org.springframework.web.servlet.DispatcherServlet noHandlerFound WARNING: No mapping found for HTTP request with URI [/BudgeAllocatorWeb/home] in >DispatcherServlet with name 'spring-mvc'
My controller is really simple, since I'm just trying to learn and figure out how it works:
@Controller
@RequestMapping("/login")
public class LoginController {
@RequestMapping(method=RequestMethod.GET)
public String login(ModelMap map) {
return "home";
}
}
And my tiles-def.xml looks like:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name="base" template="/pages/base_layout/layout.jsp">
<put-attribute name="title" value="" />
<put-attribute name="header" value="/pages/base_layout/header.jsp" />
<put-attribute name="menu" value="/pages/base_layout/menu.jsp" />
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/pages/base_layout/footer.jsp" />
</definition>
<definition name="home" extends="base">
<put-attribute name="title" value="Budgeter" />
<put-attribute name="body" value="/pages/home.jsp" />
</definition>
</tiles-definitions>
And my spring-mvc-servlet XML file:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="controllers" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- <property value="/" name="prefix" />
<property value=".jsp" name="suffix" /> -->
</bean>
<!-- Spring Tiles -->
<bean id="tilesviewResolver" class="org.springframework.web.servlet.view.tiles2.TilesViewResolver">
<property name="viewClass">
<value>
org.springframework.web.servlet.view.tiles2.TilesView
</value>
</property>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles-def.xml</value>
</list>
</property>
</bean>
</beans>
So my controller returns "home" intending to hit the "home" that is defined in my tiles-def. It works for regular pages, but not tiles definitions. Is there anything I'm missing here?
Upvotes: 0
Views: 531
Reputation: 943
Remove the InternalViewResolver
or set an order to the resolvers with resolver.setOrder(x)
. Try removing this code
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- <property value="/" name="prefix" />
<property value=".jsp" name="suffix" /> -->
</bean>
This way only the tiles view resolver will be used.
Upvotes: 0