1

次のタイル構成ファイルがあります

<tiles-definitions>
    <definition name="base" template="/includes/layout.jsp">
        <put-attribute name="header" value="/includes/header.jsp" />
        <put-attribute name="menu" value="/includes/menu.jsp" />
        <put-attribute name="footer" value="/includes/footer.jsp" />
    </definition>
    <definition name="home" extends="base">
        <put-attribute name="contentBody" value="/home/view.jsp" />
    </definition>
</tiles-definitions>

「view.jsp」ページを表示するには、「home.jsp」という別のページがあり、次のコードがあります(のみ)

//home.jsp

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<tiles:insertDefinition name="home" />

ここでの問題は、「edit.jsp」ページを同じレイアウトでロードしたい場合、この部分を tiles.xml で繰り返す必要があることです。

<definition name="editbase" extends="base">
            <put-attribute name="contentBody" value="/home/edit.jsp" />
</definition>

「editbase.jsp」というファイルを作成して呼び出します。(上記のコードを繰り返します)

私はこれが正しい方法なのか、それとも次のようなことができるのか疑問に思っています

<tiles-definitions>
        <definition name="base" template="/includes/layout.jsp">
            <put-attribute name="header" value="/includes/header.jsp" />
            <put-attribute name="menu" value="/includes/menu.jsp" />
            <put-attribute name="footer" value="/includes/footer.jsp" />
        </definition>
        <definition name="home" extends="base">
            <put-attribute name="contentBody" value="/home/view.jsp" />
            <put-attribute name="contentBody" value="/home/edit.jsp" />  
        </definition>
</tiles-definitions> 

それに応じてページをロードします..私の質問は明確だと思います

私はApacheタイル2.2.2を使用しています

前もって感謝します

乾杯

同時代

4

1 に答える 1

1

多くの異なるヘッダー/フッター/メニューがない限り/includes/layout.jsp、ヘッダー、フッター、およびメニュー コードを直接配置することで単純化できます。次に、<tiles:insert>実際のページ コンテンツを挿入するために使用します。

/includes/layout.jsp

<html>
    <head>
        ...
    </head>
    <body>
        <!-- put your header code here -->
        ...

        <!-- put your menu code here -->
        ...

        <tiles:insert attribute="contentBody" />        

        <!-- put your footer code here -->
        ...
    </body>
</html>

tiles-defs.xml

contentBodyという属性を作成します。

<tiles-definitions>
    <definition name="base" template="/includes/layout.jsp">
        <!-- Create a contentBody with no value -->
        <put name="contentBody" value="" />
    </definition>

    <definition name="view" extends="base">
        <!-- Override base's contentBody -->
        <put name="contentBody" value="/home/view.jsp" />
    </definition>

    <definition name="edit" extends="base">
        <!-- Override base's contentBody -->
        <put name="contentBody" value="/home/edit.jsp" />
    </definition>       
</tiles-definitions>

JSP ビューア ファイルには tile タグがありません。これらのタグをビューアに配置すると、レイアウトが非常に固定的で邪魔になるためです... これが現在直面している問題です。代わりに、実際のコンテンツのみをビューアー ファイルに入れます。<tiles:insert>これらは、レイアウト ファイルから自動的に含まれます。

struts-config.xml

Struts を使用している場合、定義名viewおよびeditは、struts 構成内のパスと一致する必要があります。たとえば、次のようになります。

    <action path="/bla" type="..." name="FrmReport" scope="request">
        <!-- path "view" must match tiles definition name -->
        <forward name="success" path="view"></forward>
    </action>

このようにして、Tiles はページが画面に表示される前にページを自動的に装飾します。

于 2011-04-04T14:58:29.733 に答える