目次へ

23. Tiles タグライブラリ2

23.1. definition タグ / put タグ

definition タグ・put タグは Tiles 設定ファイルの definition 要素・put 要素に相当するタグです。definition タグは定義 (タイルの組み合わせ) を JavaBean として生成し、put タグは定義等にタイル属性 (要素) を追加します。put タグは、insert タグか definition タグの中でしか使用できません。

definition タグに定義されている属性を以下に示します。

属性名 必須 スクリプト
可能
説明
extends   Tiles 設定ファイル中の継承元となる定義名を指定します。definition タグで定義した定義は継承できないので注意してください。
id   新しく作られる定義 Bean の名前を指定します。
page   挿入するタイル、テンプレート、コンポーネントの URL を指定します。
role   この定義を挿入する前にチェックするロールを指定します。
scope     新しく定義する JavaBean を作る変数スコープを指定します。指定しない場合、JavaBean は、page スコープで作られます。

以下は put タグに定義されている属性です。

属性名 必須 スクリプト
可能
説明
beanName   挿入対象となるコンポーネントの名前を指定するのに使用される JavaBean の名前を指定します。
beanProperty   beanName 属性で指定した JavaBean のプロパティを指定します。
beanScope     JavaBean を検索するスコープを指定します。任意の JSP スコープ、component、template のいずれかを指定します。デフォルトは page スコープです。
name     タイル属性の名前を指定します。
role   このタグを実行するのに必要な role があれば指定します。
type     コンテンツの型を指定します。string, page, template, definition のうちいずれかを指定します。
string : 値は文字列として使用されます。
page | template : 値は挿入するページの URL として使用されます。
definition : 値は挿入する定義名として使用されます。
value   タイル属性の値を指定します。

18章の 2節で説明した Tiles 設定ファイルを、Tiles タグライブラリを使用して書き換えると以下のようになります。

<%@ page contentType="text/html; charset=EUC-JP" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<tiles:definition id="main" page="/WEB-INF/jsp/layout.jsp">
  <tiles:put name="title" value="ヘッダー" />
  <tiles:put name="menu">/WEB-INF/jsp/menu.html</tiles:put>
  <tiles:put name="content" value="/WEB-INF/jsp/content.jsp" />
</tiles:definition>
...

定義を使用するには JSP ページの任意の場所で insert タグを使用して include します。

<tiles:insert beanName="main" flush="true"/>

JSP でタイル定義を管理する際、通常は定義用の JSP ページを用意し、各 JSP ページで include して使用するのが管理の点で望ましいでしょう。しかし、定義を使用する各ページで include するのも煩雑です。特に理由がない限り定義は Tiles 設定ファイルで管理するのが良いでしょう。

(実習課題1)

19章の実習課題2の Web アプリケーションを改良しなさい。

  • Tiles 設定ファイルを使用しないこと。

解答例はこちら

(実習課題2)

19章の実習課題2の Web アプリケーションを改良しなさい。

  • definition タグの extends 属性を使用し、ヘッダ部が異なるページを作成すること。
  • 定義用の JSP ページを用意し、各ページで include すること。
  • 生成した定義 JavaBean は application スコープに登録し、include の度に新たな定義 JavaBean が生成されないようにすること。

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp