2016-12-23 15 views
0

스타일 및 스크립트 목록을 상속 할 수있는 기본 정의를 정의하고 싶습니다. 기본 정의를 상속하는 페이지 정의를 정의하고 페이지 별 스타일 및 스크립트를 추가합니다. 이게 가능합니까? 아니면 올바른 생각이 아닌가요? 나는 이것을 아주 기본적인 아이디어라고 생각했을 것이다.Tiles 3 put 속성에서 다른 정의를 참조하는 방법

기본 정의

<tiles-definitions> 
    <!-- base styles --> 
    <definition name="base.styles" > 
     <put-list-attribute name="styles" cascade="true" > 
      <add-attribute value="/view/common/jquery-ui-theme-base-v1.12.1.css" /> 
     </put-list-attribute> 
    </definition> 
    <!-- base scripts --> 
    <definition name="base.scripts" > 
     <put-list-attribute name="scripts" cascade="true" > 
      <add-attribute value="https://code.jquery.com/jquery-3.1.0.min.js" /> 
      <add-attribute value="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" /> 
     </put-list-attribute> 
    </definition> 
    <!-- base definition --> 
    <definition name="base.definition" template="/WEB-INF/page/defaultLayout.jsp" > 
     <put-attribute name="title" /> 
     <put-attribute name="styles" value="base.styles.styles" cascade="true" /> 
     <put-attribute name="header" value="/WEB-INF/page/common/header.jsp" /> 
     <put-attribute name="body" /> 
     <put-attribute name="scripts" value="base.scripts.scripts" cascade="true" /> 
     <put-attribute name="footer" value="/WEB-INF/page/common/footer.jsp" /> 
    </definition> 
</tiles-definitions> 

노트는 풋 속성의 값은 그 위의 정의의 이름과 일치.

페이지 특정 정의

<tiles-definitions> 
    <!-- page specific styles --> 
    <definition name="samplePage.styles" extends="base.styles" > 
     <put-list-attribute name="styles" inherit="true" > 
      <add-attribute value="/view/page/samplePage/samplePageStyles.css" /> 
     </put-list-attribute> 
    </definition> 
    <!-- page specific scripts --> 
    <definition name="samplePage.scripts" extends="base.scripts" > 
     <put-list-attribute name="scripts" inherit="true" > 
      <add-attribute value="/view/page/samplePage/samplePageScript.js" /> 
     </put-list-attribute> 
    </definition> 
    <!-- page specific definition --> 
    <definition name="samplePage" extends="base.definition" > 
     <put-attribute name="title" value="Sample Page" /> 
     <put-attribute name="styles" value="samplePage.styles" cascade="true" /> 
     <put-attribute name="body" value="/WEB-INF/page/samplePage/samplePageBody" /> 
     <put-attribute name="scripts" value="samplePage.scripts" cascade="true" /> 
    </definition> 
</tiles-definitions> 

가 다시 위의 정의의 이름과 일치 풋 - 속성의 값을 - 주 (이 정확하지 내 생각이다). (아마도 해결되지?) 나는 현재는 IllegalArgumentException 스타일과 스크립트에 대한 풋 속성이 그들 위에 같은 이름의 정의를 따기하지 않는 것처럼 나타납니다

Caused by: java.lang.IllegalArgumentException: Cannot convert samplePage.styles of type class java.lang.String to class org.apache.tiles.Attribute 
at com.sun.el.lang.ELSupport.coerceToType(ELSupport.java:428) 
at com.sun.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:85) 
... 104 more 

납니다

...하지만 그것을 해결하기 위해 무엇을해야할지 모르겠습니다. 어떤 아이디어?

답변

0

방법을 넣어 - 속성 다른 정의를 참조하는 질문 에 대답하기 위해,이 같은 다음 (주의 정의하고, '유형' 속성)으로 JSP 구성 요소를 매우 쉽게 것으로 보인다 :

그들이 트란하지 않는 한 다음 다른 곳
<definition name="default.header" template="/WEB-INF/page/common/header.jsp" /> 

...

<put-attribute name="header" type="definition" value="default.header" /> 

그러나,이처럼 보이지 않는이 같은 스타일 시트 및 스크립트와 같은 자원을 수행 할 수 있습니다 실제 템플릿으로 다시 슬레이트한다. 그래서 저는베이스 정의를 다음과 같이 수정했습니다. 여전히 '글로벌'리소스와 '페이지 별'리소스를 가질 수 있습니다. 또한 jsp 구성 요소를 한 번 작성하고 한 번 정의한 다음 여러 번 참조 할 수있게합니다.

일반적인 정의 (tiles.common.xml)

<tiles-definitions> 
    <definition name="default.header" template="/WEB-INF/page/common/header.jsp" /> 
    <definition name="default.footer" template="/WEB-INF/page/common/footer.jsp" /> 

    [... all the other common components...] 

</tiles-definitions> 

기본 정의 (tiles.base.xml)

<tiles-definitions> 
    <definition name="base.definition" template="/WEB-INF/page/baseLayout.jsp" > 
     <put-attribute name="title" type="string" /> 
     <put-attribute name="header" type="definition" value="default.header" /> 
     <put-attribute name="body" /> 
     <put-attribute name="footer" type="definition" value="default.footer" /> 
     <put-list-attribute name="styles" inherit="true" > 
      <add-attribute value="/view/common/jquery-ui-theme-base-v1.12.1.css" /> 

      [... other styles common to all pages...] 

     </put-list-attribute> 
     <put-list-attribute name="scripts" inherit="true" > 
      <add-attribute value="https://code.jquery.com/jquery-3.1.0.min.js" /> 
      <add-attribute value="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" /> 

      [... other scripts common to all pages...] 

     </put-list-attribute> 
    </definition> 
</tiles-definition> 

페이지의 특정 정의 (tiles.samplePage.xml)

<tiles-definitions> 
    <definition name="samplePage" extends="base.definition" > 
     <put-attribute name="title" value="Sample Page" /> 
     <put-attribute name="body" value="/WEB-INF/page/samplePage.jsp" /> 
     <put-list-attribute name="styles" inherit="true" > 
      <add-attribute value="/view/pages/samplePage.css" /> 

      [... other page specific styles ...] 

     </put-list-attribute> 
     <put-list-attribute name="scripts" inherit="true" > 
      <add-attribute value="/view/pages/samplePage.js" /> 

      [... other page specific scripts ...] 

     </put-list-attribute> 
    </definition> 
</tiles-definition>