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 があります。これは、JSP ページ実装オブジェクトが本体の評価 (および適切な場合は再評価) を配置する BodyContent オブジェクトを含みます。setter メソッド (setBodyContent) は、doStartTag() が EVAL_BODY_BUFFERED を返し、対応するアクション要素に空の本体がない場合にのみ呼び出されます。
メソッド
bodyContent プロパティの setter メソッドに加えて、新しいアクションメソッド 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_AGAINEVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE| 修飾子と型 | メソッドと説明 |
|---|---|
void | doInitBody() 身体の評価の準備をします。 |
void | setBodyContent(BodyContent b)bodyContent プロパティを設定します。 |
doAfterBodydoEndTag, 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 JspExceptionJSP コンテナーは、doInitBody() の呼び出し後に、AT_BEGIN および NESTED 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。
JspException - このタグの処理中にエラーが発生した場合 IterationTag.doAfterBody()Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.