我在我的网络应用程序中使用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
属性正确传递给我的布局模板,而不是布局模板中包含的菜单模板?< / p>
答案 0 :(得分: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>
答案 1 :(得分:3)
使用嵌套模板定义(因为不写)是答案。您需要DTD版本&gt; = 2.1才能使用 见Nesting Apache Tiles Template