问题是我如何覆盖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}" />
......但它不起作用。谢谢你的帮助!
答案 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" />
应该在您的模板中按预期工作。