ファイヤープロジェクト
カスタムタグの属性
2004-06-05T15:00+09:00   matsu
属性を持つカスタムタグを作成してみた.
カスタムタグには属性を持つものがある.以下にサンプルを示す.
JSPコンテナは,カスタムタグの属性をグハンドラに渡し,タグハンドラはこの値によって処理を動的に変えたりできる.上の例では属性hogeAtrがある.タグハンドラにはこの属性の値を受け取るためにsetterを用意する.以下にタグハンドラを示す.
ポイントはsetHogeAtrである.これはTagなどのインタフェースにはない.各カスタムタグに持たせる属性に応じて,そのタグハンドラに定義する.メソッド名は"set"の後に属性名の先頭を大文字にしたものである.サンプルでは属性hogeAtrのためにsetHogeAtrを用意した.
JSPコンテナは,各カスタムタグがどんなタグを持つか,必須か任意かといった属性に関する情報をtldファイルから得る.以下に前節のサンプルのためのtldファイルを示す.
ここには前頁のhelloタグとattribute-holderタグのための記述がある.本頁での問題は後者である.要素tagの内部にさらに要素attributeがある.これが該当タグの持つ属性を示している.
  <attribute>
    <name>属性名</name>
    <required>必須か否か(任意).デフォルトはfalse.true|false|yes|no</required>
    <rtexpvalue>属性値にスクリプトレットや式を使用できるか否か(任意).
                      デフォルトはfalse.</rtexpvalue>
    <type>属性値の型(任意).FQCNで記述する.</type>
  </attribute>
ここでは属性名だけを記述した.タグハンドラにあるsetterすべてに対応する属性をここに記述する必要はないが,カスタムタグで使用する属性はすべてここに記述されていなければならない.JSPコンテナはこの属性の情報から,カスタムタグの属性に関する情報が取得でき,JSPファイルのカスタムタグの記述の妥当性を検証する.
以下にサンプルのJSPにアクセスした結果を示す.
この出力からわかるように,setterはdoStartTagの前に呼ばれる.JSPコンテナはカスタムタグを読み込みつつ,タグハンドラに対して以下の操作を行う(※).
開始タグの先頭の検知
インスタンスの生成.
属性の検知
属性のsetter呼び出し
開始タグの終りの検知
doStartTag呼び出し
終了タグの検知
doEndTag呼び出し
※ ここではまだカスタムタグの内容(Body)の扱いは考慮にいれていない.それは別頁にて記述する.
matsu(C)
Since 2002
Mail to matsu