|
|||||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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 |
フィールドの詳細 |
public static final int EVAL_BODY_TAG
public static final int EVAL_BODY_BUFFERED
メソッドの詳細 |
public void setBodyContent(BodyContent b)
setBodyContentが呼び出されたとき、暗黙オブジェクトの出力値はすでにpageContextオブジェクト内で更新されています。 取得されたBodyContentオブジェクトにはデータがありません。しかし、前回の呼び出しで再利用(とクリア)されています。
BodyContentオブジェクトは有効で、doEndTagメソッドの起動後まで、再利用される場合は特定のコンテンツを伴います。
b
- the BodyContentdoInitBody()
,
IterationTag.doAfterBody()
public void doInitBody() throws JspException
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.