2016-12-23 117 views
0

我希望能夠定義一個基本定義,我可以在其中繼承樣式和腳本列表。然後定義一個繼承基本定義的頁面定義,並添加頁面特定的樣式和腳本。這是可能的 - 或者我沒有以正確的方式考慮這個問題?我會認爲這是一個相當基本的想法。Tiles 3如何引用put-attribute中的另一個定義

基本定義

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

但是,它看起來並不像這可以用資源,如樣式表和腳本來完成,因爲它們不TRAN石板回到一個實際的模板。因此,我重新編寫了我的基本定義,如下所示,它仍然允許我擁有「全局」資源以及「特定頁面」資源。還允許我編寫一次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> 
相關問題