public interface IterationTag extends Tag
IterationTag を実装するタグハンドラーは、doStartTag() および doEndTag() メソッドに関してタグを実装するものとして扱われます。IterationTag は新しいメソッド doAfterBody()
を提供します。
doAfterBody() メソッドは、すべてのボディ評価の後に呼び出され、ボディが再評価されるかどうかを制御します。doAfterBody() が IterationTag.EVAL_BODY_AGAIN を返す場合、本体が再評価されます。doAfterBody() が Tag.SKIP_BODY を返す場合、本体はスキップされ、代わりに doEndTag() が評価されます。
プロパティタグのプロパティ以外に新しいプロパティはありません。
メソッド新しいメソッドが 1 つあります。doAfterBody() です。
ライフサイクル
ライフサイクルの詳細は、以下の遷移図で説明されています。doStartTag()、BODY、doAfterBody() の計算中にスローされた例外は、実行シーケンスを中断し、タグハンドラーが TryCatchFinally インターフェースを実装していない限り、スタックに伝達されます。詳細については、そのインターフェースを参照してください。
空の空でないアクション
TagLibraryDescriptor ファイルが、アクションによって常に空の要素本体が必要であることを示している場合、<body-content> 「空」のエントリの場合、doStartTag() メソッドは SKIP_BODY を返す必要があります。
doStartTag() の後にどのメソッドが呼び出されるかは、TLD での宣言方法ではなく、戻り値と、カスタムアクション要素が空であるか JSP ページにないかによって異なります。
SKIP_BODY が返された場合、本体は評価されず、doEndTag() が呼び出されます。
EVAL_BODY_INCLUDE が返され、カスタムアクション要素が空でない場合、ボディが評価されて現在の出力に「渡され」、doAfterBody() が呼び出され、ゼロ回以上の反復の後に doEndTag() が呼び出されます。
修飾子と型 | フィールドと説明 |
---|---|
static int | EVAL_BODY_AGAIN 体の再評価を依頼してください。 |
EVAL_BODY_INCLUDE, EVAL_PAGE, SKIP_BODY, SKIP_PAGE
修飾子と型 | メソッドと説明 |
---|---|
int | doAfterBody() プロセス本体(再)評価。 |
doEndTag, doStartTag, getParent, release, setPageContext, setParent
static final int EVAL_BODY_AGAIN
int doAfterBody() throws JspException
doAfterBody が EVAL_BODY_AGAIN を返す場合、本体の新しい評価が行われます(その後に doAfterBody がもう一度呼び出されます)。doAfterBody が SKIP_BODY を返す場合、それ以上のボディ評価は行われず、doEndTag メソッドが呼び出されます。
このタグハンドラーが BodyTag を実装し、doAfterBody が SKIP_BODY を返す場合、doEndTag を呼び出す前に、pageContext の popBody メソッドを使用して out の値が復元されます。
共有状態にいくつかの変更があったか、外部計算が原因で、メソッドの再呼び出しが異なるアクションにつながる可能性があります。
JSP コンテナーは、doAfterBody() の呼び出し後に、AT_BEGIN および NESTED 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。
JspException
- このタグの処理中にエラーが発生した場合 Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.