From http://tiles.apache.org/2.0/framework/tutorial/advanced/nesting-extending.html

<definition name="myapp.homepage.body" 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>

<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" value="myapp.homepage.body" />
  <put-attribute name="footer" value="/tiles/credits.jsp" />
</definition>

I need to extend myapp.homepage and in that extended definition I need to add another attribute to myapp.homepage.body . Hope it make sense.

有帮助吗?

解决方案

I was finally able to solve the problem. The answer is following:

<definition name="myapp.homepage_extended" extends="myapp.homepage" >
  <put-attribute name="new-attr-in-body" value="/tiles/new-attr-in-body.jsp"  cascade="true" />
</definition>

The trick is to add cascade="true" so that the attribute can cascade through the nested definition.

其他提示

<definition name="myapp.homepage.extended" extends="myapp.homepage">
    <put-attribute name="yournewattribute" value="My New Attribute" />
</definition>

!-- Note: you can also use this pattern to override an attribute. All the other     attributes will remain:
<definition name="myapp.homepage.override" extends="myapp.homepage">
    <put-attribute name="tiele="My New Title" />
</definition>

!-- Or you can combine overrrides with additional attributes:
<definition name="myapp.homepage.custom" extends="myapp.homepage">
    <put-attribute name="tiele="My New Title" />
    <put-attribute name="yournewattribute" value="My New Attribute" />
</definition>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top