1

問題は、タイルの子テンプレートの属性をオーバーライドする方法です。

base と child の 2 つのテンプレートがあります。これはベース レイアウトの一部です - 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}" />

...しかし、うまくいきません。助けてくれてありがとう!

4

1 に答える 1

2

value 属性ではなく、expression 属性を使用する必要があります。tiles3 では、カスケードが真でない属性の文字列値に問題がありました... これは tiles3 を想定しています (ただし、ほとんどはほとんどのタイル 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" />、テンプレートで期待どおりに機能するはずです。

于 2013-02-14T21:58:39.773 に答える