2012-10-18 19 views
5

私はstruts2構成に名前空間を追加したいと思います。タイルを使用します。複数のStruts2名前空間をタイルで使用する

例えば私のstruts.xmlのパッケージ:

<package name="search" namespace="/search" extends="struts-default"> 
<result-types> 
    <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult" /> 
</result-types> 
<action name="SearchActionInit" class="web.action.SearchAction" method="initSearch"> 
    <result name="input" type="tiles">search</result> 
    <result name="success" type="tiles">search</result> 
</action> 
</package> 

と、対応するタイルの設定:

<definition name="baseLayout" template="layout.jsp"> 
    <put-attribute name="titre"    value="titre.default" /> 
    <put-attribute name="header"   value="/common/header.jsp" /> 
    <put-attribute name="menu"   value="/common/menu.jsp" /> 
    <put-attribute name="leftcontent"   value="/common/leftcontent.jsp" /> 
    <put-attribute name="rightcontent"   value="/common/rightcontent.jsp" /> 
    <put-attribute name="detail"   value="/common/detail.jsp" /> 
    <put-attribute name="footer"    value="/common/footer.jsp" /> 
</definition> 

<definition name="search" extends="baseLayout"> 
    <put-attribute name="titre"    value="titre.search" /> 
    <put-attribute name="rightcontent"   value="/pages/search/Search.jsp" /> 
</definition> 

私が持っている問題は、私は中layout.jspを複製する必要があるということです名前空間検索のためのフォルダを検索します(他の名前空間についても同様です)。それはタイルのロジックではなく、維持するためにさらに努力をもたらすでしょう。

重複を避けるためにこの問題の鍵を誰かが持っていますか?

+0

こんにちは、なぜあなたはlayout.jspを複製する必要があるのですか? 'result-types'を定義する必要はありません。答えは、' – Jaiwo99

+0

Thxです。タイルを追加する変更はありません。デフォルトです。名前空間と同じ名前のフォルダ内のlayout.jspを待っているため、複製する必要があります。たとえば、この例では、layout.jspの名前を変更して、404エラー(search/layout.jspが見つかりません)を取得します。 – Rydermark

+0

私はついにあなたの質問を理解します。私はあなたに答えを後で与えます.. – Jaiwo99

答えて

1

はこれを試してみてください。

テンプレート:その後、

<!-- meta template --> 
<definition name="global" template="/WEB-INF/template/layout.jsp"> 
    <put-attribute name="attr1" value="/WEB-INF/template/attr1.jsp"/> 
    <put-attribute name="attr2" value="/WEB-INF/template/attr2.jsp"/> 
    <!-- more --> 
</definition> 

データ:

<!-- instance --> 
<definition name="myApp.search" extends="global"> 
    <put-attribute name="attr2" value="/jsp/search/search.jsp"/> 
</definition> 
<!-- instance --> 
<definition name="myApp.page2" extends="global"> 
    <put-attribute name="attrN" value="/jsp/namespaceN/whatever.jsp"/> 
</definition> 

をあなたがロードしたいページlayout.jspの一部を上書きするだけです。ここ

は私のプロジェクト構造である:

Root 
| 
--jsp 
    | 
    namespace1 
     | 
     --*.jsp 
    | 
    --*.jsp 
| 
--WEB-INF 
    | 
    --template 
     | 
     --layout.jsp 
     | 
     --attr1.jsp 

私はこれがあなたの問題を解決したいと考えています。

+0

Thx Jaiwo。私はいくつかのテストをしました。重要な点は、レイアウトのパスを入れることです。 ( "layout.jsp"ではなく "/layout.jsp"を入れてください)あなたは私の目を開きます! – Rydermark

関連する問題