0

すべてのページの「t.base」ビュー定義があります。

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

その主な属性はbody、各子テンプレートで定義する必要があるものです。ここで、ホームページに直接本体に挿入されるスライダーが必要です (画面と同じ幅になるようにします)。

<definition name="t.homepage" extends="t.base">
    <put-attribute name="body" value="/WEB-INF/jsp/homepage.jsp"/>
    <put-attribute name="title" expression="lyricsBase : home of lyrics"/>
</definition>

残りのページはすべて HTML コンテナー内に配置して (いくつかの CSS スタイルを追加)、画面の幅 (余白など) と同じにならないようにする必要があります。bodyこのコンテナ テンプレートでタイル属性を「オーバーライド」する必要があります。

<div class="container marketing">
    <div class="container">
        <tiles:insertAttribute name="body" />
    </div>
</div>

コンテナ HTML タグ内の子ビューの例:

<definition name="t.jukebox" extends="t.base">
    <put-attribute name="body">
        <definition template="/WEB-INF/tiles/container.jsp">
            <put-attribute name="body" value="/WEB-INF/jsp/jukebox.jsp" />
        </definition>
    </put-attribute>
    <put-attribute name="title" expression="${jukebox.name} - lyricsBase"/>
</definition>

とにかく、これは見栄えがよくありません。構成サイズを縮小し、まったく同じ効果が得られるより良い解決策があることを願っています。私はこのコンテナの定義をしようとしています:

<definition name="t.container" extends="t.base">
    <put-attribute name="body" value="/WEB-INF/tiles/container.jsp"/>
</definition>

これは子テンプレートによって使用されます。しかし、私はそれを構成する方法がわかりません。

つまり、ロシアのマトリョーシカ人形のように、すべてのレベルで同じ属性名を使用することを実現したいと考えています。属性をオーバーライドするだけです。私はdecoratorパターンに慣れていますが、これcomposite viewはまだ抽象的です。どんな助けでも大歓迎です。

4

1 に答える 1

0

定義の継承を使用できます。ここで、t.homepageは の拡張子になりt.containert.containerは t.base の拡張子になります。さらに、body 属性の内部に別のスロットを作成し、その子定義を定義することができます。

于 2013-08-11T02:59:08.457 に答える