インターフェース BodyTag

  • すべてのスーパーインターフェース:
    IterationTagJspTagTag
    すべての既知の実装クラス:
    BodyTagSupport

    public interface BodyTag
    extends IterationTag
    BodyTag インターフェースは、タグハンドラーがその本体を評価するコンテンツを操作できるようにする追加のメソッドを定義することにより、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() の計算中にスローされた例外は実行シーケンスに割り込み、スタックに伝達されます。詳細については、そのインターフェースを参照してください。

    Lifecycle Details Transition Diagram for BodyTag

    空の空でないアクション

    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() のみが呼び出されます。

    • フィールドの詳細

      • EVAL_BODY_TAG

        @DeprecatedSE
        static final int EVAL_BODY_TAG
        使用すべきではありません。
        Java JSP API 1.2 以降、BodyTag.EVAL_BODY_BUFFERED または IterationTag.EVAL_BODY_AGAIN を使用します。
        EVAL_BODY_BUFFERED および EVAL_BODY_AGAIN と同じ値を持つ非推奨の定数。この名前は、より説明的な 2 つの異なる用語の使用を促進するために非推奨としてマークされています。
        関連事項:
        定数フィールド値
      • EVAL_BODY_BUFFERED

        static final int EVAL_BODY_BUFFERED
        このタグの本体を評価するための新しいバッファ、BodyContent の作成をリクエストします。BodyTag を実装する場合、doStartTag から返されます。クラスが BodyTag を実装していない場合、これは doStartTag の不正な戻り値です。
        関連事項:
        定数フィールド値
    • メソッドの詳細

      • setBodyContent

        void setBodyContent​(BodyContent b)
        bodyContent プロパティを設定します。このメソッドは、JSP ページ実装オブジェクトによって、アクション呼び出しごとに最大 1 回呼び出されます。このメソッドは、doInitBody の前に呼び出されます。このメソッドは、空のタグ、または doStartTag() メソッドが SKIP_BODY または EVAL_BODY_INCLUDE を返す空でないタグに対しては呼び出されません。

        setBodyContent が呼び出されると、暗黙的なオブジェクト out の値は pageContext オブジェクトですでに変更されています。渡された BodyContent オブジェクトにはデータは含まれませんが、以前の呼び出しから再利用 (およびクリア) されている可能性があります。

        BodyContent オブジェクトは、doEndTag メソッドが呼び出されるまでは使用可能であり、適切なコンテンツを持ちます。その場合、再利用できます。

        パラメーター:
        b - BodyContent
        関連事項:
        doInitBody(), IterationTag.doAfterBody()
      • doInitBody

        void doInitBody()
                 throws JspException
        本文の評価を準備します。このメソッドは、setBodyContent の後、本文が最初に評価される前に、JSP ページ実装オブジェクトによって呼び出されます。このメソッドは、空のタグ、または doStartTag() メソッドが SKIP_BODY または EVAL_BODY_INCLUDE を返す空でないタグに対しては呼び出されません。

        JSP コンテナーは、doInitBody() の呼び出し後に、AT_BEGIN および NESTED 変数(関連する TagExtraInfo または TLD によって定義される)の値を再同期します。

        例外:
        JspException - このタグの処理中にエラーが発生した場合
        関連事項:
        IterationTag.doAfterBody()