1

ヘッダー、メニュー、およびコンテンツを備えた非常に基本的な tiles1 セットアップがあります。

<definition name="Main" path="/WEB-INF/jsp/MainLayout.jsp">
    <put name="header" value="/WEB-INF/jsp/Header.jsp"/>
    <put name="menu" value="/WEB-INF/jsp/Menu.jsp"/>
    <put name="content" value=""/>
</definition>

すべてのサブページはこの定義を拡張し、コンテンツ セクションに jsp を提供します。

<definition name="SearchPage" extends="Main">
    <put name="content" value="/WEB-INF/jsp/Search.jsp"/>
</definition>

私が探しているのは、上記の SearchPage 定義が属性を「配置」して、Search.jsp で使用できるようにする方法です。私の最初の試みは:

<definition name="SearchPage" extends="Main">
    <put name="content" value="/WEB-INF/jsp/Search.jsp"/>
    <put name="showOptions" value="true" type="string"/>
</definition>

ただし、この場合、showOptions 属性は MainLayout.jsp でのみ使用でき、Search.jsp には渡されません。レイアウト ページで useAttribute を介して明示的に渡す方法があることは知っていますが、サブページで使用できる可能性のあるすべての変数についてレイアウト ページが知る必要があるのは避けたいと思います。

NB tiles2 には、私が探していることを正確に実行する気の利いた cascade="true" 属性があるようですが、残念ながら tiles1 で立ち往生していると思います。


GriffeyDog のおかげで素晴らしい 1 行の修正:

MainLayout.jsp で、すべてのタイル属性をリクエスト スコープにインポートします。その後、すべてのサブページで使用できます (名前の競合に注意してください)。

<tiles:importAttribute scope="request"/>

また、jsp ページの代わりにコンテンツとして必要な属性を持つ定義を使用する別の方法も見つけました: http://wiki.apache.org/struts/StrutsDocTiles (ソリューション #1)

4

1 に答える 1