ファイヤープロジェクト
カスタムタグの内容の表示
2004-06-05T17:00+09:00   matsu
内容というより,本体とかBodyと言った方がよいかもしれない.とにかく開始タグと終了タグの間の部分を出力してみる.
本頁では,以下のサンプルJSPで,タグの内容を表示したり,しなかったりするカスタムタグsimple-bodyのタグハンドラを作成してみる.
で,いきなりタグハンドラを以下に示す.
simple-bodyには属性bodyIsVisibleがあって,この値をtrueまたはfalseで指定することによって,タグの内容を出力したりしなかったりする.タグハンドラにこの属性bodyIsVisibleのsetterを用意した.このsetterは"true","false"以外が渡されると例外を投げるようにしてみた.
サンプルでは,doStartTagはbodyIsVisibleの値に応じて返り値を切替えている.このように,JSPコンテナはdoStartTagの返り値が
Tag.EVAL_BODY_INCLUDE
なら,タグの内容を評価する.「評価」という表現から,文字列なら単に出力し,スクリプトレットなどならそれに応じた処理が施されることが想像できる.JSPコンテナは,doStartTagの返り値が
Tag.SKIP_BODY
なら評価せずdoEndTag呼び出しを行う.以下にサンプルのJSP出力を示す.
念のために今回のサンプルのtldファイルを以下に示す.
今までのサンプルと同じtaglibに追加した.最後の要素tagが今回のサンプル用のものである.今回は記述してないが,要素tagの記述任意子要素にbody-contentがある.
<tag>
...
  <body-content>タグの本体情報(任意).empty,JSP,tagdependentから選ぶ.デフォルトはJSP</body-content>
...
</tag>
body-contentはempty,JSP,tagdependentのいずれかを内容としてもつ.それぞれの意味を以下に示す.
empty
空.該当カスタムタグは常に空タグでなければならない.すなわち<.../>または<...></...>という記述でなければならない(エラーとなる).
JSP
本体はJSPコンテナに解釈してもらう.
tagdependent
カスタムタグのタグハンドラに解釈を任せる.
現段階では,空タグしか許可しないならempty,それ以外はJSPとして内容をそのままJSPコンテナに解釈してもらうかである.tagdependentについては別頁にて記述する.
matsu(C)
Since 2002
Mail to matsu