2013-02-14 55 views
1

问题是如何覆盖瓷砖子模板中的属性。apache瓷砖 - 如何覆盖子模板的属性

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

<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}" /> 

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

回答

2

您不应该使用value属性,而应该使用expression属性。在tiles3中,我遇到了字符串值的问题,但是没有级联的字符串值为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" />应该按预期在您的模板。

+0

表达式(而不是值)解决了这个问题。谢谢! 顺便说一句 - 为什么你在这里添加“级联”?对我而言,它没有它。 – ducin 2013-02-14 22:15:08

+0

就在昨天晚上,我遇到了一个奇怪的问题,那就是我无法覆盖没有级联的值,如果字符串为真,它不会影响模板......只是字符串。如果你不需要这样做,那就完美了(真的不应该)。你应该只需要在定义内部模板时需要级联......这不是我的情况,但由于某种原因添加它对我有用。 – Quaternion 2013-02-14 22:30:15