2016-12-23 17 views
0

Я хотел бы иметь возможность определить базовое определение, где я могу наследовать список стилей и скриптов. затем определите определение страницы, которое наследует базовое определение, и добавляет стили и скрипты, специфичные для страницы. Возможно ли это, или я не думаю об этом правильно? Я бы подумал, что это довольно простая идея.Плитки 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>