2

私は自分の Web アプリケーションで Tiles 2 を使用しています。また、tiles.xml ファイルで得た基本的なセットアップは次のとおりです。

<tiles-definitions>
    <definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>
        <put-attribute name="menu" value="/jsp/defaultMenu.jsp" />
        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>

    <definition name="HomePage" extends="mainLayout">
        <put-attribute name="content" type="template" value="/jsp/home.jsp"/>
        <put-attribute name="homeClass" value="active" />
    </definition>

    ... rest omitted for brevity.

レイアウトを定義する layout.jsp では、適切な場所にメニューを含めます。

<tiles:insertAttribute name="menu" />

そこで、メニュー テンプレート内で、tiles.xml で定義された homeClass 属性を使用したいと考えました。

<tiles:insertAttribute name='homeClass'/>

しかし、homeClass 属性が定義されていないというエラーが表示されます。layout.jsp で insertAttribute を実行すると、値は適切に定義されますが、レイアウトに含まれるメニュー JSP で定義する必要があります。

それで、私の質問は次homeClassのとおりです。レイアウト テンプレートだけでなく、レイアウト テンプレートから含まれるメニュー テンプレートにも属性を正しく渡す にはどうすればよいですか?

4

1 に答える 1

3

ネストされたテンプレート定義を使用できると思います:

<definition name="mainLayout" template="/jsp/layout.jsp">
        <put-attribute name="header" value=""/>

        <put-attribute name="menu">
            <definition template="/jsp/defaultMenu.jsp">
                <put-attribute name="homeClass" value="active"/>
            </definition>
         </put-attribute>

        <put-attribute name="content" value="" />
        <put-attribute name="footer" value="/jsp/footer.jsp" />
    </definition>
于 2010-11-03T20:03:08.557 に答える