ネストしたTile

Tileの一部分でさらに別のTile定義を使用するような場合、ネストして使用することになる。

bodyをさらに top、center、bottom に分割する場合tiles.xmlで分割部分のdefinitionをし、

<definition name="default.layout_body" template="/tiles/layout_body.jsp">
    <put-attribute name="top"    type="string"><![CDATA[topです]]></put-attribute>
    <put-attribute name="center" type="string"><![CDATA[centerです]]></put-attribute>
    <put-attribute name="bottom" type="string"><![CDATA[bottomです]]></put-attribute>
</definition>

layout_body.jspはとりあえずなんでもない、好きなようにレイアウトする。

<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<div id="top">
      <tiles:insertAttribute name="top"/>
</div>
<div id="center">
      <tiles:insertAttribute name="center"/>
</div>
<div id="bottom">
      <tiles:insertAttribute name="bottom"/>
</div>

そして、個別のページの方で次の様にしてネスト部分を取り込む

<%@page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<tiles:insertDefinition name="default.layout">
 <tiles:putAttribute name="title">タイトル</tiles:putAttribute>
 <tiles:putAttribute name="body">
   <tiles:insertDefinition name="default.layout_body">
     <tiles:putAttribute name="center">
       ボディーの真ん中部分の上書き
     </tiles:putAttribute>
   </tiles:insertDefinition>
  </tiles:putAttribute>
</tiles:insertDefinition>