2013-02-14 54 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