嵌套Apache Tiles模板

时间:2009-05-12 18:37:22

标签: apache jsp struts2 tiles2

所以我发现了这个:http://tiles.apache.org/framework/tutorial/advanced/nesting-extending.html

以下是示例:

<definition name="myapp.homepage" template="/layouts/classic.jsp">
  <put-attribute name="title" value="Tiles tutorial homepage" />
  <put-attribute name="header" value="/tiles/banner.jsp" />
  <put-attribute name="menu" value="/tiles/common_menu.jsp" />
  <put-attribute name="body">
    <definition template="/layouts/three_rows.jsp">
      <put-attribute name="one" value="/tiles/headlines.jsp" />
      <put-attribute name="two" value="/tiles/topics.jsp" />
      <put-attribute name="one" value="/tiles/comments.jsp" />
    </definition>
  </put-attribute>
  <put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>

所以我定义了这个:

<definition name="mgmt.base.layout" extends="base.layout">
     <put-attribute name="body">
         <definition template="/WEB-INF/mgmt/config/mgmtBody.jsp"/>
             <put-attribute name="adminLeft"  value="/WEB-INF/mgmt/config/left.jsp"/>
             <put-attribute name="adminRight" value="/tiles/blank.html"/>
         </definition>
     </put-attribute>
</definition>

但有趣的是,即使是他们自己的文档也是错误的:

2009-05-12 11:20:56,088 [main] ERROR - org.apache.commons.digester.Digester.error(Digester.java:1635):第17行第68行的分析错误:属性“ name“是必需的,必须为元素类型”定义“指定”。 org.xml.sax.SAXParseException:属性“name”是必需的,必须为元素类型“definition”指定。

即使我为它定义了一个名称,它仍然会出现以下错误:

2009-05-12 11:35:31,818 [main] ERROR - org.apache.commons.digester.Digester.error(Digester.java:1635):第21行第19行的分析错误:内容元素类型“put-attribute”必须匹配“null”。  org.xml.sax.SAXParseException:元素类型“put-attribute”的内容必须与“null”匹配。

这是什么意思?!!!!

2 个答案:

答案 0 :(得分:5)

将DTD版本更改为2.1解决了我的问题!

答案 1 :(得分:2)

您使用的架构要求put-attribute是叶子节点,即不能包含子元素 - 因此您不能这样做。找出更新版本的架构(必须在Tiles文档或示例中)是否允许嵌套切片模板。

-Kalle

所以基本上我使用旧版本的磁贴并使用新版本模式: 以下是旧嵌套模式的语法: http://tiles.apache.org/2.0/framework/tutorial/advanced/nesting-extending.html