apache tiles - 如何从子模板覆盖属性

时间:2013-02-14 21:23:53

标签: java-ee attributes tiles

问题是我如何覆盖tile子模板中的属性。

我有两个模板:base和child。这是基本布局的一部分 - HTML head:

<title>
    <tiles:insertAttribute name="title" />
    lyricsBase: <c:out value="${jukebox.name}" />
</title>

这是我的tiles.xml:

<definition name="t.base" template="/WEB-INF/tiles/base.jsp">
    <put-attribute name="title" value="SomeTitle"/>
</definition>
[...]
<definition name="t.song" extends="t.base">
    <put-attribute name="body" value="/WEB-INF/jsp/song.jsp"/>
    <put-attribute name="title" value="song.title"/>
</definition>

当我运行我的页面时,我会得到以下HTML标题:song.title lyricsBase: xxx。我应该在子视图中添加什么代码来覆盖title属性?我想把它变成$ {song.title},例如

<tiles:putAttribute name="title" value="${song.title}" />

......但它不起作用。谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您不应该使用value属性而是使用expression属性。在tiles3中,我遇到了put属性的字符串值的问题,没有cascade为true ...这假设tiles3(尽管大多数适用于大多数tile 2)。

以下是未经测试的:

<definition name="t.base" template="/WEB-INF/tiles/base.jsp">
    <put-attribute name="title" cascade="true" value="SomeTitle"/>
</definition>
[...]
<definition name="t.song" extends="t.base">
    <put-attribute name="body" value="/WEB-INF/jsp/song.jsp"/>
    <put-attribute name="title"  cascade="true" expression="EL:song.title"/>
</definition>

然后<tiles:insertAttribute name="title" />应该在您的模板中按预期工作。