Struts2でTilesを利用することの利点

Struts2JSPで出力にTilesのレイアウトを適用すると、利点としてレイアウト変更に容易に対応できるという点はすぐに分かるが実はもっと大きな利点がある。


それは、画面の出力順にかかわらず任意の順序で要素を生成できるというものである。

これはTilesが出力を自動的にバッファリングし、溜め込んだ結果をテンプレートに嵌め込む仕組みからきている。

ではどういう場合にこの利点が生かされるかというと例えば次のようなシナリオで有効だ。

HTMLのtitleを内容により変化させたい場合

通常titleタグは body タグの前に記述する必要があるが、Tilesのバッファリングのおかげで生成するページでは後に記述することができるので容易に実現できる。

こちらが生成ページで

<tiles:insertDefinition name="normal.layout">
 <tiles:putAttribute name="body">
  <s:action name="test" executeResult="true" flush="false" id="result"/>
 </tiles:putAttribute>
 <tiles:putAttribute name="title"><s:property value="#result.title"/></tiles:putAttribute>
</tiles:insertDefinition>

そして normal.layout のテンプレート側は次のような感じになる

<html>
 <head>
  <title><tiles:insertAttribute name="title"/></title>
 </head>
 <body>
  <tiles:insertAttribute name="body"/>
 </body>
</html>

このように action の id による結果参照とを組み合わせると、そうでない場合の自前のバッファリングやJavaScriptによる書き換えなどと比べてかなりストレートにページのタイトル出力が行える。