public interface Tag extends JspTag
プロパティ
Tag インターフェースは、コア pageContext および親プロパティの setter および getter メソッドを指定します。
JSP ページ実装オブジェクトは、doStartTag() または doEndTag() を呼び出す前に、setPageContext および setParent をこの順序で呼び出します。
メソッド
主なアクションは、doStartTag と doEndTag の 2 つです。適切なプロパティがすべて初期化されると、doStartTag メソッドと doEndTag メソッドをタグハンドラーで呼び出すことができます。これらの呼び出しの間、タグハンドラーは、保持する必要がある状態を保持していると想定されます。doEndTag の呼び出し後、タグハンドラーをさらに呼び出すことができます(そのプロパティが保持されていることが期待されます)。
ライフサイクル
ライフサイクルの詳細は、以下の遷移図と以下のコメントで説明されています。
setParent()
は同じページ内で再利用されているがレベルが異なる場合に呼び出され、setPageContext()
は別のページで使用されている場合に呼び出され、値 setter は値が異なるかリクエスト時の属性値として表現されている場合に呼び出されます。タグハンドラーのすべての呼び出しが完了すると、リリースハンドラーが呼び出されます。release メソッドが呼び出されると、parent や pageContext を含むすべてのプロパティが未指定の値にリセットされたと見なされます。ページコンパイラーは、ハンドラーが GC に解放される前に、release() がタグハンドラーで呼び出されることを保証します。
空の空でないアクション
TagLibraryDescriptor ファイルで、アクションによって常に空のアクションが必要であることが示されている場合、<body-content> 「空」のエントリの場合、doStartTag() メソッドは SKIP_BODY を返す必要があります。
それ以外の場合、doStartTag() メソッドは SKIP_BODY または EVAL_BODY_INCLUDE を返す場合があります。
SKIP_BODY が返された場合、ボディが存在しても評価されません。
EVAL_BODY_INCLUDE が返される場合、本体が評価され、現在の出力に「渡されます」。
修飾子と型 | フィールドと説明 |
---|---|
static int | EVAL_BODY_INCLUDE ボディを既存のアウトストリームに評価します。 |
static int | EVAL_PAGE ページの評価を続けます。 |
static int | SKIP_BODY ボディ評価をスキップします。 |
static int | SKIP_PAGE ページの残りをスキップします。 |
修飾子と型 | メソッドと説明 |
---|---|
int | doEndTag() このインスタンスの終了タグを処理します。 |
int | doStartTag() このインスタンスの開始タグを処理します。 |
Tag | getParent() このタグハンドラーの親(最も近い外側のタグハンドラー)を取得します。 |
void | release() 状態を解放するためにタグハンドラーで呼び出されます。 |
void | setPageContext(PageContext pc) 現在のページコンテキストを設定します。 |
void | setParent(Tag t) このタグハンドラーの親(最も近い囲みタグハンドラー)を設定します。 |
static final int SKIP_BODY
static final int EVAL_BODY_INCLUDE
static final int SKIP_PAGE
static final int EVAL_PAGE
void setPageContext(PageContext pc)
この値は doEndTag() によってリセットされない * ため *、doStartTag() の呼び出し間で変更される場合は、ページ実装によって明示的にリセットする必要があります。
pc
- このタグハンドラーのページコンテキスト。void setParent(Tag t)
この値は doEndTag() によってリセットされず、ページ実装によって明示的にリセットする必要があります。
t
- 親タグ、または null。Tag getParent()
getParent() メソッドは、カスタムアクション間の連携のために、実行時にネストされたタグハンドラー構造をナビゲートするために使用できます。たとえば、TagSupport の findAncestorWithClass() メソッドは、これを行う便利な方法を提供します。
仕様の現在のバージョンは、タグハンドラーの監視可能な型を示す 1 つの正式な方法のみを提供しています。タグハンドラーの実装クラスは、タグ要素の tag-class サブ要素で説明されます。これは、タグライブラリの作成者が記述サブ要素でオブザーバブル型を指定できるようにすることにより、非公式な方法で拡張されます。型は、タグハンドラー実装クラスのサブ型または void である必要があります。この追加の制約は、JSP 標準タグライブラリの場合のように、その特定のタグライブラリについて知っている特殊なコンテナーによって悪用される可能性があります。
TagSupport.findAncestorWithClass(jakarta.servlet.jsp.tagext.Tag, java.lang.Class<?>)
int doStartTag() throws JspException
doStartTag メソッドは、プロパティ pageContext と親が設定されていることを前提としています。また、属性として公開されているプロパティも設定されていることを前提としています。このメソッドが呼び出されたとき、本体はまだ評価されていません。
このメソッドは、Tag.EVAL_BODY_INCLUDE または BodyTag.EVAL_BODY_BUFFERED を返し、アクションの本体を評価する必要があることを示すか、SKIP_BODY を返します。
タグが EVAL_BODY_INCLUDE を返すと、ボディの評価結果(存在する場合)が現在の「アウト」JspWriter に含まれ、その結果 doEndTag() が呼び出されます。
BodyTag.EVAL_BODY_BUFFERED は、タグハンドラーが BodyTag を実装している場合にのみ有効です。
JSP コンテナーは、doStartTag() メソッドが BodyTag.EVAL_BODY_BUFFERED を返す BodyTag を実装するタグハンドラーを除いて、doStartTag() の呼び出し後に AT_BEGIN および NESTED 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。
JspException
- このタグの処理中にエラーが発生した場合 BodyTag
int doEndTag() throws JspException
このメソッドは、doStartTag から戻った後に呼び出されます。doStartTag の戻り値に応じて、アクションの本文が評価されている場合と評価されていない場合があります。
このメソッドが EVAL_PAGE を返す場合、ページの残りの部分は引き続き評価されます。このメソッドが SKIP_PAGE を返す場合、ページの残りの部分は評価されず、リクエストは完了し、タグを囲む doEndTag() メソッドは呼び出されません。このリクエストが転送されたか、別のページ(またはサーブレット)から含まれていた場合、現在のページの評価のみが停止されます。
JSP コンテナーは、doEndTag() の呼び出し後に、AT_BEGIN および AT_END 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。
JspException
- このタグの処理中にエラーが発生した場合 void release()
Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.