【问题标题】:Tiles 2 Access Variable in TemplateTiles 2 模板中的访问变量
【发布时间】:2011-07-21 03:21:42
【问题描述】:

我正在使用带有 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。有人知道怎么回事吗?

【问题讨论】:

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


    【解决方案1】:

    然后我尝试拥有这个 /WEB-INF/views/index.jsp:

    你如何尝试这个?在您的控制器中,您将指定 Tiles 视图的名称,而不是使用多个 JSP Tiles 之一来呈现页面:

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

    【讨论】:

    • 在我开发的这一点上,没有控制器,我有一个&lt;mvc:view-controller path="/index.html" /&gt;。这似乎让我得到了我想要的模板,但我当然不知道如何。
    • 请用控制器试一试,因为我有一些非常相似的例子,而且没有问题。
    • 我正在努力做到这一点,所以您能给我的任何建议将不胜感激。
    猜你喜欢
    • 2014-03-07
    • 2017-04-28
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2021-07-31
    • 2018-05-31
    相关资源
    最近更新 更多