我正在使用带有 Apache Tiles 2 的 Spring MVC 框架。我希望能够让多个控制器都使用相同的视图(不同的逻辑,一些基本的演示)。我可以轻松做到这一点。我现在想要的是为每个控制器有不同的 Tiles 定义,都使用相同的 JSP 文件,但每个都传递不同的模板变量(页眉、简短描述等)。这是我的 Tiles 模板定义文件:
<tiles-definitions>
<!-- Default Main Template -->
<definition name=".mainTemplate" template="/WEB-INF/templates/main.jsp">
<put-attribute name="shortTitle" value="Company ABC" type="string" />
<put-attribute name="body" value="/WEB-INF/templates/blank.jsp" />
</definition>
<!-- Overriding Templates -->
<definition name="index" extends=".mainTemplate">
<put-attribute name="title" value="Company Alpha Bravo Charlie" type="string" />
<put-attribute name="body" value="/WEB-INF/views/index.jsp" />
</definition>
<definition name="index2" extends=".mainTemplate">
<put-attribute name="title" value="Company Other Page" type="string" />
<put-attribute name="body" value="/WEB-INF/views/index.jsp" />
</definition>
</tiles-definitions>
然后我尝试拥有这个/WEB-INF/views/index.jsp
:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<h1>
Hello world, it's <tiles:getAsString name="title" />!
</h1>
当我将它加载到 Tomcat 中并打开页面时,我得到了很长的异常堆栈跟踪。堆的顶部说org.apache.tiles.impl.CannotRenderException: ServletException including path '/WEB-INF/templates/main.jsp'.} with root cause org.apache.tiles.template.NoSuchAttributeException: Attribute 'title' not found
。有人知道发生了什么吗?