|
タグハンドラは JSP ページとその他のサーバサイドオブジェクトとの橋渡しをするのが役目です。タグハンドラはJSPページの実行中にカスタムタグが読み込まれると呼び出されます。
カスタムタグの開始タグと終了タグが読み込まれた時にはそれぞれ doStartTag() と doEndTag() が呼び出されます。タグハンドラが確保したリソースは release()メソッドで解放します。
タグハンドラには2つのインターフェースが備わっています。
Tag |
タグのボディ部を解釈しない簡単なタグハンドラ
|
BodyTag |
Tag インターフェースを拡張したもので、タグのボディ部をアクセスできるハンドラ
|
タグハンドラは2つの大きなアクションメソッドを持っています。
doStartTag() |
そのアクションの開始タグを処理します。
|
doEndTag() |
アクションの終了タグを処理するもので、doStartTag からリターンした後に呼び出されます。
|
release() |
リソースを開放します |
doStartTag() は次の値を戻り値とします。
EVAL_BODY_INCLUDE
-
タグのボディ部を処理しますが、新しい BodyContent を作ることはしません。
ボディ部を処理することなしにそのまま渡します。
BodyTagインターフェースを実装していない時にのみ有効です。
EVAL_BODY_TAG
-
タグのボディ部を処理し、新しい BodyContent を作ります。
BodyTagインターフェースを実装している時にのみ有効です。
SKIP_BODY
doEndTag() は次の値を返します。
この戻り値はJSPページの残りをどのように評価するかを直接 JSP コンテナへ渡します。release()メソッドはタグハンドラが確保したリソースの開放をします。
TagSupport と BodyTagSupport はともに Tag のサブクラスで、新しいタグハンドラを作成する時のベースクラスとして使用することが出来ます。
Tag を実装している TagSupport はユーティリティクラスで、次のような便利なメソッドを持っています。
アクションの本体(タグのボディ部)を操作するようなタグハンドラならば、BodyTagインターフェースを
実装する必要があります。タグのボディ部が評価されるようにdoStartTag() は必ず EVAL_BODY_TAG
を返さなければなりません。もしSKIP_BODYが返されたら開始タグから終了タグまでのボディ部は無視されて
しまいます。タグのボディ部を取り扱うメソッドには次のようなものがあります。
doInitBody() |
タグのボディ部が読み込まれた後で、評価される前に呼び出されます。
|
doAfterBody() |
タグのボディ部が評価された後で呼び出されます。 |
BodyTagSupport クラスは BodyTag インターフェースを実装し、かつ便利なメソッドが追加されています。例えば次のようなメソッドです。:
bodyContentプロパティの取得メソッド
- 以前使用された JSPWriter
out の取得メソッド
Webアプリケーションではタグハンドラは次に示すように、Javaクラスの標準的な格納場所のどこかになければなりません。
/WEB-INF/lib ディレクトリにある JAR ファイルの中
/WEB-INF/classes ディレクトリの中
タグハンドラは JSP コンテナが設定メソッドで設定したプロパティにアクセス
することができます。pageContext や parent などがそれです。
また、さらにタグハンドラは中に入っているサーバ側のオブジェクトとアクションにもアクセスできます。
タグがネストされているならば、タグを囲んでいる親タグのハンドラは以下のいずれかのメソッドでアクセスできます。
TagSupport.getParent()
TagSupport.findAncestorWithClass(from, class)
一度親オブジェクトの取得が出来たら、その親オブジェクトからは動的または静的に生成したオブジェクトに
アクセスが出来るようになります。
|