【问题标题】:Nesting templates in Tiles, why are attributes undefined in the included template?在 Tiles 中嵌套模板,为什么在包含的模板中未定义属性?
【发布时间】:2010-10-27 14:06:06
【问题描述】:

我在我的 Web 应用程序中使用 Tiles 2,我的 tiles.xml 文件中的基本设置是这样的:

<tiles-definitions>
    <definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>
        <put-attribute name="menu" value="/jsp/defaultMenu.jsp" />
        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>

    <definition name="HomePage" extends="mainLayout">
        <put-attribute name="content" type="template" value="/jsp/home.jsp"/>
        <put-attribute name="homeClass" value="active" />
    </definition>

    ... rest omitted for brevity.

在定义布局的 layout.jsp 中,我将菜单包含在适当的位置。

<tiles:insertAttribute name="menu" />

所以,然后在我的菜单模板中,我想使用在 tiles.xml 中定义的 homeClass 属性。

<tiles:insertAttribute name='homeClass'/>

但我收到有关未定义 homeClass 属性的错误。如果我在 layout.jsp 中执行 insertAttribute,则该值已正确定义,但我需要在菜单 JSP 中定义它,包括在我的布局中。

所以,我的问题是:我怎样才能让homeClass 属性不仅正确传递给我的布局模板,而且还传递给布局模板中包含的菜单模板?

【问题讨论】:

  • 嵌套瓦片有自己的属性空间——这就是 homeClass 未定义的原因——但不要害怕:你可以在两个地方都定义它

标签: apache jsp tiles2


【解决方案1】:

我相信您可以使用嵌套模板定义:

<definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>

        <put-attribute name="menu">
            <definition template="/jsp/defaultMenu.jsp">
                <put-attribute name="homeClass" value="active"/>
            </definition>
         </put-attribute>

        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>

【讨论】:

    猜你喜欢
    • 2012-06-11
    • 2016-02-24
    • 2015-05-19
    • 2019-01-19
    • 2021-11-19
    • 2018-02-27
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多