目次へ

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

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp