2012-10-18 25 views
5

Struts2 yapılandırmamda ad alanları eklemek istiyorum ve fayans kullanıyorum.Fayanslarla birden çok Struts2 ad alanı kullanmak

örneğin benim struts.xml bir paketi:

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

Ve karşılık gelen fayans yapılandırmasını:

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

Ben sorun ben de layout.jsp çoğaltmak için ihtiyaç vardır ad alanı araması için arama klasörü (ve diğer ad alanları için). Fayans mantığında değil ve sürdürmek için daha fazla çaba harcayacak.

Çoğaltmayı önlemek için bu sorunun anahtarı olan herhangi biri var mı?

+0

Merhaba, neden layout.jsp dosyasını kopyalamanız gerektiğini anlamıyorum. ve 'result-types' tanımlamanız gerekmez, şunu deneyin: '' – Jaiwo99

+0

Cevabınız için teşekkürler. Fayans varsayılanını ekleyerek değişiklik yok. Yinelenmesi gerekiyor çünkü bir layout.jsp'yi ad alanıyla aynı ada sahip bir klasörde bekliyor. Örneğin bu örnekte, layout.jsp'yi yeniden adlandırıyorum ve 404 hatası alıyorum (arama/layout.jsp bulunamadı). – Rydermark

+0

Nihayet şimdi sorunuzu anlıyorum. Size daha sonra cevabı vereceğim .. – Jaiwo99

cevap

1

bu deneyin:

şablonu:

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

sonra veriler:

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

Sen gereken tek yüklemek istediğiniz sayfanın layout.jsp, bir bölümünün üzerine yazması.

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

Ben bu sorunu çözer umut:

burada benim projem yapıdır.

+0

Thx Jaiwo. Bazı testler yaptım. Önemli olan, düzen için bir yol açmaktır. ("Layout.jsp" yazmayın ama "/layout.jsp") Siz gözlerimi açıyorsunuz! – Rydermark