javax.servlet.jsp.tagext
インタフェース BodyTag

すべてのスーパーインタフェース:
IterationTag, Tag
既知の実装クラスの一覧:
BodyTagSupport

public interface BodyTag
extends IterationTag

BodyTagインターフェースは、IterationTagクラスから継承したクラスです。 タグハンドラがボディの評価内容を操作するメソッドが追加定義されています。

ボディコンテンツの操作はタグハンドラの役割です。 たとえば、タグハンドラはボディコンテンツを取り出し、bodyContent.getString メソッドを使用してStringに変換した後、それを使用することができます。 また、タグハンドラはボディコンテンツを取り出し、bodyContent.writeOutメソッドを使い、内包されているJspWriterに出力することができます。

BodyTagを実装しているタグハンドラは、doStartTagメソッドがSKIP_BODY、EVAL_BODY_INCLUDE、EVAL_BODY_BUFFEREDを返せることを除き、IterationTagを実装しているとみなせます。

もし、EVAL_BODY_INCLUDEが返されたならば、評価はIterationTag内で発生したものです。

もし、EVAL_BODY_BUFFEREDが返されたならば、BodyContentオブジェクトはボディ評価をキャプチャして(JSPコンパイラーによって生成されたコードから)作成されます。 JSPコンパイラによって生成されたコードは、前の出力値を保持する役目がある現在のpageContextのpushBodyメソッドを呼ぶことにより、BodyContentオブジェクトを含みます。 ページコンパイラは、PageContextクラスのpopBodyメソッド呼ぶことによってこのオブジェクトを返します。その呼び出しは出力値のリストアもします。

インターフェースは、セッターメソッドと1つの新しいアクションメソッドと共に1つの新しいプロパティを提供します。

プロパティ

新しいプロパティ bodyContent があります。これは BodyContent オブジェクトを保持しまが、 JSPページ実装はこのオブジェクトに、ボディの評価(必要な場合は再評価)を保存します。 セッターメソッド(setBodyContent)は、doStartTag()がEVAL_BODY_BUFFEREDを返した場合にのみ起動されます。

Methodsメソッド

bodyContentプロパティのセッターメソッドに加え、新しいアクションメソッドdoInitBody()があります: setBodyContent()の直後、ボディ評価の前に呼び出されます。 このメソッドは、doStartTag()がEVAL_BODY_BUFFEREDを返す時のみ起動されます。

ライフサイクル

ライフサイクルの詳細は、以下の状態遷移図で表されます。 doStartTag()、setBodyContent()、doInitBody()、BODY、doAfterBody()の処理中にスローされる例外は、 実行シーケンスに割り込み、タグハンドラが TryCatchFinally インタフェース(詳細はインタフェース定義を参照) を実装していない限りは、スタックの上方に向かって伝播されます。

エンプティアクションとノンエンプティアクション

TagLibraryDescriptorファイルで、<body-content>エントリーを"empty"とすることにより、アクションを常にエンプティアクションと指示した場合、doStartTag()メソッドはSKIP_BODYを返します。 そうでなければ、doStartTag()メソッドは、SKIP_BODYかEVAL_BODY_INCLUDE、EVAL_BODY_BUFFEREDを返します。

SKIP_BODYが返された場合、ボディは評価されず、doEndTag()が呼び出されます。

EVAL_BODY_INCLUDEが返された場合、setBodyContent()は呼び出されず、doInitBody()も呼び出されず、ボディが評価され、現在の出力へ転送され、doAfterBody()が呼び出され、そして0回以上の繰り返し後、doEndTag()が呼び出されます。

EVAL_BODY_BUFFEREDが返された場合、setBodyContent()が呼び出され、doInitBody()が呼び出され、 ボティが評価され、doAfterBody()が呼び出され、そして0回以上の繰り返し後、doEndTag()が呼び出されます。


フィールドの概要
static int EVAL_BODY_BUFFERED
          BodyContentでの、タグのボディを評価するために、新しいバッファを作成するリクエスト。
static int EVAL_BODY_TAG
          推奨されていません。 Java JSP API 1.2では、BodyTag.EVAL_BODY_BUFFEREDかIterationTag.EVAL_BODY_AGAINを使用してください。
 
インタフェース javax.servlet.jsp.tagext.IterationTag から継承したフィールド
EVAL_BODY_AGAIN
 
インタフェース javax.servlet.jsp.tagext.Tag から継承したフィールド
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
 
メソッドの概要
 void doInitBody()
          ボディの評価をするための準備をします。
 void setBodyContent(BodyContent b)
          bodyContetプロパティを設定します。
 
インタフェース javax.servlet.jsp.tagext.IterationTag から継承したメソッド
doAfterBody
 
インタフェース javax.servlet.jsp.tagext.Tag から継承したメソッド
doEndTag, doStartTag, getParent, release, setPageContext, setParent
 

フィールドの詳細

EVAL_BODY_TAG

public static final int EVAL_BODY_TAG
推奨されていません。 Java JSP API 1.2では、BodyTag.EVAL_BODY_BUFFEREDかIterationTag.EVAL_BODY_AGAINを使用してください。

EVAL_BODY_BUFFEREDとEVAL_BODY_AGAINのような同じ値を持つ推奨されない定数。 推奨しないとマークされているこの名前は、もっと他の記述で異なる2つのタームを使うよう奨励されています。

関連項目:
定数フィールド値

EVAL_BODY_BUFFERED

public static final int EVAL_BODY_BUFFERED
BodyContentでの、タグのボディを評価するために、新しいバッファを作成するリクエスト。 BodyTagが実装されたとき、doStartTagから返されます。 クラスがBodyTagを実装しないとき、doStartTagのこの返り値は不正です。

関連項目:
定数フィールド値
メソッドの詳細

setBodyContent

public void setBodyContent(BodyContent b)
bodyContetプロパティを設定します。 このメソッドは、JSPページ実装オブジェクトによってアクションが呼ばれるごとに一度だけ呼び出されます。 このメソッドは、doInitBodyの前に呼び出されます。 このメソッドは、doStartTag()メソッドがSKIP_BODYかEVAL_BODY_INCLUDEを返すエンプティタグもしくはノンエンプティタグでは呼び出されません。

setBodyContentが呼び出されたとき、暗黙オブジェクトの出力値はすでにpageContextオブジェクト内で更新されています。 取得されたBodyContentオブジェクトにはデータがありません。しかし、前回の呼び出しで再利用(とクリア)されています。

BodyContentオブジェクトは有効で、doEndTagメソッドの起動後まで、再利用される場合は特定のコンテンツを伴います。

パラメータ:
b - the BodyContent
関連項目:
doInitBody(), IterationTag.doAfterBody()

doInitBody

public void doInitBody()
                throws JspException
ボディの評価をするための準備をします。 このメソッドは、setBodyContentの後、最初にボディが評価される前に、JSPページ実装オブジェクトによって呼び出されます。 このメソッドは、doStartTag()メソッドがSKIP_BODYかEVAL_BODY_INCLUDEを返すエンプティタグもしくはノンエンプティタグでは呼び出されません。

JSPコンテナは、doInitBody()が呼び出された後、TagExtraInfoと同様に指定された変数の値を再同期します。

例外:
JspException
関連項目:
IterationTag.doAfterBody()


このドキュメントは、Ja-Jakarta Project により翻訳されました。コメントがある場合は、jajakarta-report@jajakarta.good-day.netまでお願いします。

Copyright © 1999-2002 The Apache Software Foundation. All Rights Reserved.