Spring 3 と Tiles 2.2 で Web アプリケーションを構築しています。次のレイアウト定義を入れました:
<tiles-definitions>
<definition name="default" template="/WEB-INF/layouts/default.jspx">
<put-attribute name="header" value="main.header" />
<put-attribute name="top_menu" value="/WEB-INF/views/top_menu.jspx" />
<put-attribute name="left_column" value="main2.left_column" />
<put-attribute name="main_column" value="main2.main_column" />
<put-attribute name="footer" value="/WEB-INF/views/footer.jspx" />
</definition>
<definition name="main2.main_column" template="/WEB-INF/layouts/double_column/main_column.jspx">
</definition>
<definition name="main2.left_column" template="/WEB-INF/layouts/left_column.jspx">
<put-attribute name="profile_menu" value="/WEB-INF/views/userprofile/userdetails.jspx" />
<put-attribute name="common_menu" value="/WEB-INF/views/menu.jspx" />
</definition>
</tiles-definitions>
WEB-INF/layouts/default.jspx 内
<div id="main_page" >
<tiles:insertAttribute name="left_column"/>
<tiles:insertAttribute name="main_column"/>
<div id="footer" >
<tiles:insertAttribute name="footer" ignore="true"/>
</div>
</div>
/WEB-INF/layouts/double_column/main_column.jspx に次のものがあります。
<tiles:insertAttribute name="body"/>
要求されたパス view.xml は次のように定義されます。
<tiles-definitions>
<definition extends="default" name="secure/createAccount/*">
<put-attribute name="body" value="/WEB-INF/views/secure/createAccount/{1}.jspx"/>
</definition>
</tiles-definitions>
エラーは次のとおりです。
org.apache.tiles.template.NoSuchAttributeException: 属性「本体」が見つかりません。 org.apache.tiles.template.DefaultAttributeResolver.computeAttribute(DefaultAttributeResolver.java:49) org.apache.tiles.template.InsertAttributeModel.resolveAttribute(InsertAttributeModel.java:187) org.apache.tiles.template.InsertAttributeModel.start(InsertAttributeModel.java:107) org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:306) org.apache.jsp.WEB_002dINF.layouts.double_005fcolumn.main_005fcolumn_jspx._jspx_meth_tiles_005finsertAttribute_005f0(main_005fcolumn_jspx.java:79) org.apache.jsp.WEB_002dINF.layouts.double_005fcolumn.main_005fcolumn_jspx._jspService(main_005fcolumn_jspx.java:54)
「本文」をデフォルトのテンプレートに直接配置すると機能しますが、テンプレートのブリックをデフォルトのレイアウトだけでなく、多くのレイアウトで再利用できるようにする必要があり、main_column を使用してすべてのフォーマットを各テンプレート定義にコピーしたくありません。
ご意見をお聞かせください