2

我在我的 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属性不仅正确传递给我的布局模板,而且还传递给布局模板中包含的菜单模板?

4

1 回答 1

3

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

<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>
于 2010-11-03T20:03:08.557 回答