public interface BodyTag extends IterationTag
本文の内容を操作するのは、タグハンドラーのロールです。たとえば、タグハンドラーは本文のコンテンツを取得し、bodyContent.getString メソッドを使用して文字列に変換してから使用することができます。または、タグハンドラーは本文のコンテンツを取得し、bodyContent.writeOut メソッドを使用して、それを囲む JspWriter に書き込むことができます。
BodyTag を実装するタグハンドラーは、doStartTag メソッドが SKIP_BODY、EVAL_BODY_INCLUDE または EVAL_BODY_BUFFERED を返すことができることを除いて、IterationTag を実装するものとして扱われます。
EVAL_BODY_INCLUDE が返される場合、評価は IterationTag の場合と同様に行われます。
EVAL_BODY_BUFFERED が返された場合、本体の評価を取得するために(JSP コンパイラーによって生成されたコードによって)BodyContent オブジェクトが作成されます。JSP コンパイラーによって生成されたコードは、現在の pageContext の pushBody メソッドを呼び出すことによって BodyContent オブジェクトを取得します。これには、以前の out 値を保存する効果もあります。ページコンパイラーは、PageContext クラスの popBody メソッドを呼び出すことにより、このオブジェクトを返します。この呼び出しは、out の値も復元します。
このインターフェースは、setter メソッドと 1 つの新しいアクションメソッドを持つ 1 つの新しいプロパティを提供します。
プロパティ
新しいコンテンツ bodyContent があり、BodyContent オブジェクトを含みます。JSP ページ実装オブジェクトは、ボディの評価(および必要に応じて再評価)を配置します。setter メソッド(setBodyContent)は、doStartTag() が EVAL_BODY_BUFFERED を返し、対応するアクション要素に空のボディがない場合にのみ呼び出されます。
メソッド
bodyContent プロパティの setter メソッドに加えて、新しいアクションメソッド doInitBody() があります。doInitBody() は、setBodyContent() の直後で本体の評価の前に呼び出されます。このメソッドは、doStartTag() が EVAL_BODY_BUFFERED を返した場合にのみ呼び出されます。
ライフサイクル
ライフサイクルの詳細は、以下の遷移図で説明されています。タグハンドラーが TryCatchFinally インターフェースを実装していない限り、doStartTag()、setBodyContent()、doInitBody()、BODY、doAfterBody() の計算中にスローされた例外は実行シーケンスに割り込み、スタックに伝達されます。詳細については、そのインターフェースを参照してください。
空の空でないアクション
TagLibraryDescriptor ファイルで、アクションによって常に空のエレメントボディが必要であることが示されている場合、<body-content> 「空」のエントリの場合、doStartTag() メソッドは SKIP_BODY を返す必要があります。それ以外の場合、doStartTag() メソッドは SKIP_BODY、EVAL_BODY_INCLUDE、EVAL_BODY_BUFFERED を返す場合があります。
doStartTag() の後にどのメソッドが呼び出されるかは、TLD での宣言方法ではなく、戻り値とカスタムアクション要素が空かどうか(JSP ページで空かどうか)の両方に依存することに注意してください。
SKIP_BODY が返された場合、本体は評価されず、doEndTag() が呼び出されます。
EVAL_BODY_INCLUDE が返され、カスタムアクション要素が空でない場合、setBodyContent() は呼び出されず、doInitBody() は呼び出されず、ボディが評価されて現在の出力に「渡され」、doAfterBody() が呼び出され、ゼロ回以上の反復の後、doEndTag() が呼び出されます。カスタムアクション要素が空の場合、doStart() と doEndTag() のみが呼び出されます。
EVAL_BODY_BUFFERED が返され、カスタムアクション要素が空でない場合、setBodyContent() が呼び出され、doInitBody() が呼び出され、本体が評価され、doAfterBody() が呼び出され、ゼロ回以上の反復の後、doEndTag() が呼び出されます。カスタムアクション要素が空の場合、doStart() と 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 を使用します。 |
EVAL_BODY_AGAIN
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
修飾子と型 | メソッドと説明 |
---|---|
void | doInitBody() 身体の評価の準備をします。 |
void | setBodyContent(BodyContent b) bodyContent プロパティを設定します。 |
doAfterBody
doEndTag, doStartTag, getParent, release, setPageContext, setParent
@DeprecatedSE static final int EVAL_BODY_TAG
static final int EVAL_BODY_BUFFERED
void setBodyContent(BodyContent b)
setBodyContent が呼び出されたとき、暗黙的なオブジェクト out の値は、pageContext オブジェクトですでに変更されています。渡された BodyContent オブジェクトにはデータはありませんが、以前の呼び出しから再利用(およびクリア)されている可能性があります。
BodyContent オブジェクトは、doEndTag メソッドの呼び出し後まで使用可能であり、適切なコンテンツが含まれています。この場合、オブジェクトは再利用できます。
b
- BodyContentdoInitBody()
, IterationTag.doAfterBody()
void doInitBody() throws JspException
JSP コンテナーは、doInitBody() の呼び出し後に、AT_BEGIN および NESTED 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。
JspException
- このタグの処理中にエラーが発生した場合 IterationTag.doAfterBody()
Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.