Spring3中的UrlBasedViewResolver和Apache Tiles2

Spring3中的UrlBasedViewResolver和Apache Tiles2,spring,spring-mvc,tiles,tiles2,Spring,Spring Mvc,Tiles,Tiles2,尝试打开URL时出现以下异常: 我的mvc-config.xml如下所示: <mvc:annotation-driven /> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>

尝试打开URL时出现以下异常:

我的mvc-config.xml如下所示:

<mvc:annotation-driven />

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions" value="/WEB-INF/tiles/tiles.xml" />
</bean>
@RequestMapping(method = RequestMethod.GET, value = "agregar")
public void agregar() { ... }
我的JSP视图文件位于/WEB-INF/views下,如下所示:

/WEB-INF/views
-- /clientes
---- agregar.jsp
-- welcome.jsp
-- clientes.jsp

谢谢

在my tiles.xml中添加了以下内容,效果良好:

<definition name="*/*" extends="mainTemplate">
    <put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>

有更好(更灵活)的解决方案吗?


如果您将遇到StackOverFlow,您应该这样做(type=“template”):


我还没有测试过它,但正如文档中所说:

  • 一个星号(*)表示单个占位符
  • 两个星号(**)表示“在指定目录下的每个目录中”
所以试着用两个星号

<definition name="**" extends="mainTemplate">
    <put-attribute name="content" value="/WEB-INF/views/{1}.jsp" />
</definition>

<definition name="*/*" extends="mainTemplate">
    <put-attribute name="content" value="/WEB-INF/views/{1}/{2}.jsp" />
</definition>
<definition name="/**" extends="page">
    <put-attribute name="content" value="/WEB-INF/jsp/{1}.jsp"/>
</definition>
<put-attribute name="some_name" value="some_page.jsp" type="template"/>
<definition name="**" extends="mainTemplate">
    <put-attribute name="content" value="/WEB-INF/views/{1}.jsp" />
</definition>