19.2. Tileの置き換え
毎回、Tiles設定ファイルに<definition>タグを追加し、JSPページを1から準備していては、あまりTilesを使用するメリットがありません。この節ではレイアウトは変えず、Tileの部分だけ、置き換える方法について説明します。
ある部分だけが変化し、その部分以外は変化しない場合があります。そういった場合には、<tiles:insert>タグの「attribute」属性や、<tiles:getAsString>タグを利用します。<tiles:insert>タグの「attribute」属性はその部分にincludeするページ(その部分に表示するテキストも可)、<tiles:getAsString>タグはその部分に表示するテキストを、外部(主にTiles設定ファイル)から指定する場合に使用します。例えば以下のように使用します。前節で使用したレイアウトのJSPページを改良します。
...
<table width="100%">
<!-- ヘッダー部 -->
<tr><td colspan="2"><tiles:getAsString name="title" /></td></tr>
<tr>
<!-- メニュー部 -->
<td width="20%"><tiles:insert attribute="menu" /></td>
<!-- コンテンツ部 -->
<td><tiles:insert attribute="content" /></td>
</tr>
<!-- フッター部 -->
<tr><td colspan="2"><tiles:insert page="/WEB-INF/jsp/footer.html" /></td></tr>
</table>
...
<tiles:getAsString>タグの「name」属性、<tiles:insert>タグの「attribute」属性は、共に置き換えのキーとなる名前を指定するものです。この例では、ヘッダー部分に表示するテキスト、メニュー/コンテンツ部分にincludeするページを外部から指定する事になります。続いてTiles設定ファイルから指定する方法について説明します。
...
<tiles-definitions>
<definition name="main" path="/WEB-INF/jsp/layout.jsp">
<put name="title" value="ヘッダー" />
<put name="menu" value="/WEB-INF/jsp/menu.html" />
<put name="content" value="/WEB-INF/jsp/content.jsp" />
</definition>
</tiles-definitions>
置き換え可能な部分をTiles設定ファイルから指定するには、対応する<definition>タグの中に<put>タグを定義します。「name」属性で置き換える部分の名前、「value」属性で表示するテキストやincludeするページのパス(相対パス・絶対パスどちらでも構わない)を指定します。value属性には、他に定義している組み合わせの名前を指定する事も可能です。<tiles:insert><tiles:getAsString>を上手く利用する事によって、以下のようにレイアウトの基本となるJSPページを再利用できるようになります。
...
<tiles-definitions>
<definition name="main" path="/WEB-INF/jsp/layout.jsp">
...
</definition>
<definition name="main2" path="/WEB-INF/jsp/layout.jsp">
<put name="title" value="タイトル" />
<put name="menu" value="/WEB-INF/jsp/menu.html" />
<put name="content" value="/WEB-INF/jsp/content2.jsp" />
</definition>
</tiles-definitions>
なお例のように日本語の値を使用する場合には、Tiles設定ファイルのxml宣言で文字コードを指定する必要があります。
(実習課題2)
実習課題1のWebアプリケーションを改良しなさい。
- 置き換わるコンテンツの部分に<tiles:insert>タグのattribute属性を利用すること。
- ページのタイトル部分に<tiles:getAsString>タグを用い、各ページのタイトルを異なるものにすること。

