Tiles 2访问模板中的变量

时间:2011-07-20 15:45:43

标签: spring java-ee spring-mvc tiles2 apache-tiles

我正在使用带有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。有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:0)

  

然后我尝试使用/WEB-INF/views/index.jsp:

你怎么试试?在您的控制器中,您将指定Tiles视图的名称,而不是多个JSP Tile中的一个将用于呈现页面:

@RequestMapping("index2")
public String index2() {
    // ...
    return "index2";
}