2012-10-18 3 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> 

내가 가진 문제는 내가 A의 layout.jsp을 복제 할 필요가있다 네임 스페이스 검색을위한 폴더 검색 (다른 네임 스페이스에 대해서도 마찬가지 임). 타일 ​​논리에 있지 않아 유지 관리에 더 많은 노력을 기울일 것입니다.

누구든지 중복을 피하기 위해이 문제의 핵심 요소가 있습니까?

+0

안녕하세요, 왜 레이아웃 (layout.jsp)을 복제해야하는지 이해가 안됩니다. 당신은'결과-types'을 정의 할 필요가 없습니다,이 시도 : '<패키지 이름이 = "검색"= "스트럿 기본, 타일 기본"네임 스페이스 = "/ 검색"확장> 당신의 대답을' – Jaiwo99

+0

들으을. 타일을 추가하는 데 변경 사항이 없음 - 기본값. 네임 스페이스와 같은 이름의 폴더에서 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