2012-10-18 3 views
5

Ich möchte Namespaces in meiner struts2-Konfiguration hinzufügen und verwende Kacheln.Mehrere Struts2-Namespaces mit Kacheln verwenden

Ein Paket von meinem struts.xml zum Beispiel:

<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> 

und die entsprechenden Kacheln Konfiguration:

<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> 

Das Problem, das ich habe ist, dass ich brauche die layout.jsp in einem duplizieren Suchordner für die Namespacesuche (und so weiter für die anderen Namespaces). Es ist nicht in der Kachellogik und wird mehr Aufwand zur Aufrechterhaltung bringen.

Hat jemand einen Schlüssel zu diesem Problem, um Doppelarbeit zu vermeiden?

+0

Hallo, ich verstehe nicht, warum du layout.jsp duplizieren musst. und Sie müssen 'result-types' nicht definieren, versuchen Sie dies:' ' – Jaiwo99

+0

Thx für Ihre Antwort. Keine Änderung beim Hinzufügen von Kacheln - Standard. Ich muss duplizieren, weil er eine layout.jsp in einem Ordner mit dem gleichen Namen wie der Namespace wartet. Zum Beispiel benenne ich in diesem Beispiel die Datei layout.jsp um und erhalte einen Fehler 404 (search/layout.jsp nicht gefunden). – Rydermark

+0

Ich verstehe deine Frage jetzt endlich. Ich werde dir die Antwort später geben .. – Jaiwo99

Antwort

1

versuchen Sie dies:

Vorlage:

<!-- 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> 

dann die Daten:

<!-- 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> 

Sie müssen nur überschreiben Sie den Teil der Seite layout.jsp, die Sie laden möchten.

hier ist meine Projektstruktur:

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

Ich hoffe, dass dies Ihr Problem löst.

+0

Thx Jaiwo. Ich habe ein paar Tests gemacht. Der wichtige Punkt ist, einen Pfad für das Layout zu setzen. (Nicht "layout.jsp" sondern "/layout.jsp") Du öffnest meine Augen! – Rydermark