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>タグを用い、各ページのタイトルを異なるものにすること。