パッケージ jakarta.faces.component

クラス UIViewAction

  • 実装されたすべてのインターフェース:
    ActionSourceActionSource2PartialStateHolderStateHolderTransientStateHolderComponentSystemEventListenerFacesListenerSystemEventListenerHolderEventListenerSE

    public class UIViewAction
    extends UIComponentBase
    implements ActionSource2

    UIViewAction は、ポストバックではなく、通常は最初のリクエストにレスポンスして、リクエスト処理ライフサイクル中に発生するメソッド呼び出しを表します。

    ViewDeclarationLanguage 実装では、<f:metadata /> 要素内に配置された <f:viewAction /> 要素が出現するたびに、このコンポーネントのインスタンスをビューに配置する必要があります。ユーザーは <f:metadata /> を UIViewRoot の直接の子として配置する必要があります。

    このクラスは ActionSource2 を実装するため、UICommand などの ActionSource2 を実装するコンポーネントに対して通常実行されるアクションは、このクラスのインスタンスに対して有効です。このクラスのインスタンスは、Ajax リクエストを含む通常の Jakarta Faces ライフサイクルに参加します。

    このコンポーネントの目的は、Jakarta Faces ビューのロード時にコードを実行して、システムサービス、コンテンツの取得、ビューの管理、ナビゲーションの統合をサポートする軽量のフロントコントローラーソリューションを提供することです。この機能は、非顔(初期)リクエストに特に役立ちます。

    このコンポーネントの最も一般的な使用例は、多くの場合 1 つ以上の UIViewParameter を使用して、特定のビューに必要なアクションを実行することです。

    アクションが呼び出された後、アクションシグネチャーと結果に一致するナビゲーションケースを実行するために NavigationHandler が参照されます。ナビゲーションケースが一致して新しい viewId が現在の viewId と異なる場合、異なる viewId を持つ一致したナビゲーションケースがリダイレクトを呼び出しているかどうかに関係なく、ランタイムは異なる viewId を持つ一致したナビゲーションケースへのリダイレクトを強制する必要があります。ナビゲーションによってフロー遷移が発生する場合は、リダイレクトのクエリ文字列に適切なメタデータを含める必要があります。&lt;redirect /&gt; ケースの処理方法の仕様については、Jakarta Faces Specification Document のセクション 7.4.2「デフォルトの NavigationHandler アルゴリズム」を参照してください

    UIViewAction コンポーネントが非面(初期)リクエストで処理される前に、完全なコンポーネントツリーが構築されないことに注意することが重要です。むしろ、コンポーネントツリーには ViewMetadata のみが含まれています。これは、このコンポーネントの最適化の重要な部分であり、PreRenderViewEvent リスナーと区別されるものです。

    導入:
    2.2
    • フィールドの詳細

      • COMPONENT_FAMILY

        public static final StringSE COMPONENT_FAMILY

        このコンポーネントの標準コンポーネントファミリ。

        関連事項:
        定数フィールド値
    • コンストラクターの詳細

      • UIViewAction

        public UIViewAction()

        デフォルトのプロパティ値で新しい UIViewAction インスタンスを作成します。

    • メソッドの詳細

      • getFamily

        public StringSE getFamily()
        クラスからコピーされた説明: UIComponent

        このコンポーネントが属するコンポーネントファミリの識別子を返します。この識別子は、rendererType プロパティの値と組み合わせて、このコンポーネントインスタンスに適切な Renderer を選択するために使用できます。このメソッドは null を返すべきではないことに注意してください

        次で指定:
        クラス UIComponentgetFamily 
        戻り値:
        コンポーネントファミリ(null 以外)。
      • isImmediate

        public boolean isImmediate()

        コンポーネントの immediate 属性の値が true の場合、アクションはリクエスト値適用 Jakarta Faces ライフサイクルフェーズ中に呼び出されます。それ以外の場合は、デフォルトの動作であるアプリケーション起動フェーズでアクションが呼び出されます。フェーズは、immediate 属性よりも優先される phase 属性で明示的に設定できます。

        次で指定:
        インターフェース ActionSourceisImmediate 
        戻り値:
        即時の場合は true、それ以外の場合は false
        導入:
        2.2
      • setImmediate

        public void setImmediate​(boolean immediate)

        この UIComponent の「即時実行」フラグを設定します。

        次で指定:
        インターフェース ActionSourcesetImmediate 
        パラメーター:
        immediate - 新しい即時実行フラグ
        導入:
        2.2
      • getPhase

        public StringSE getPhase()

        アクションがキューに入れられるライフサイクルフェーズの名前を返します。

        戻り値:
        フェーズ(文字列として)。
        導入:
        2.2
      • isProcessingBroadcast

        public static boolean isProcessingBroadcast​(FacesContext context)

        現在のリクエスト処理ライフサイクルが decode(jakarta.faces.context.FacesContext) の呼び出し中にキューに入れられたイベントのブロードキャストを処理している最中にある場合は、true を返します。broadcast(jakarta.faces.event.FacesEvent) の実装は、このメソッドの呼び出しがこの事実を正確に反映することを保証する責任があります。

        パラメーター:
        context - 現在のリクエストの FacesContext
        戻り値:
        true は現在ブロードキャストを処理しています。false はそれ以外の場合です。
        導入:
        2.2
      • getActionListeners

        public ActionListener[] getActionListeners()

        この ActionSource インスタンスに登録されている ActionListener のセットを返します。登録済みのリスナーがない場合は、長さ 0 の配列が返されます。

        次で指定:
        インターフェース ActionSourcegetActionListeners 
        戻り値:
        アクションリスナー、または長さゼロの配列。
        導入:
        2.2
      • getActionExpression

        public MethodExpression getActionExpression()

        immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値適用フェーズまたはアプリケーションの呼び出しフェーズ中に、ユーザーがこの UIComponent をアクティブ化した場合、呼び出されるアプリケーションアクションを指す MethodExpression を返します。

        次で指定:
        インターフェース ActionSource2getActionExpression 
        戻り値:
        アクション式。
        導入:
        2.2
      • setActionExpression

        public void setActionExpression​(MethodExpression actionExpression)

        immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値適用フェーズまたはアプリケーションの呼び出しフェーズ中に、この UIComponent がユーザーによってアクティブ化された場合に呼び出されるアプリケーションアクションを指す MethodExpression を設定します。

        このような式で参照されるメソッドはすべて、String の戻り値の型でパブリックであり、パラメーターを受け入れない必要があります。

        次で指定:
        インターフェース ActionSource2setActionExpression 
        パラメーター:
        actionExpression - アクション式。
        導入:
        2.2
      • isOnPostback

        public boolean isOnPostback()

        true の場合、このコンポーネントはポストバックで動作します。

        戻り値:
        ポストバックで動作する場合は true、それ以外の場合は false
        導入:
        2.2
      • setOnPostback

        public void setOnPostback​(boolean onPostback)

        このコンポーネントがポストバックで動作するかどうかを制御します。

        パラメーター:
        onPostback - onPostback フラグ。
        導入:
        2.2
      • isRendered

        public boolean isRendered()

        このコンポーネントが decode(jakarta.faces.context.FacesContext) メソッドで指定されたアクションを実行する必要がある場合は、true を返します。

        オーバーライド:
        クラス UIComponentBaseisRendered 
        戻り値:
        レンダリングする必要がある場合は true、それ以外の場合は false
        導入:
        2.2
      • setRendered

        public void setRendered​(boolean condition)

        このコンポーネントの if プロパティを設定します。

        オーバーライド:
        クラス UIComponentBasesetRendered 
        パラメーター:
        condition - プロパティの新しい値。
        導入:
        2.2
      • broadcast

        public void broadcast​(FacesEvent event)
                       throws AbortProcessingException

        このコンポーネントインスタンスによって指定されたメソッド呼び出しを有効にして、UICommand.broadcast(jakarta.faces.event.FacesEvent) と同様に、ナビゲーションを実行する値を返します。

        次の条件のいずれかに該当する場合は、何もせずにすぐに戻ります。

        • レスポンスはすでに完了としてマークされています。

        • 現在の UIViewRoot は、イベントのソースの UIViewRoot とは異なります。

        現在の UIViewRoot の viewId へのローカル参照を保存します。説明のため、この参照を viewIdBeforeAction とします。

        Application から ActionListener を取得します。アクションを実行しないように、FacesContext.renderResponse() メソッドをオーバーライドする FacesContextWrapper の実装に現在の FacesContext をラップします。現在の FacesContext を FacesContextWrapper インスタンスに設定します。現在の FacesContext で isProcessingBroadcast(jakarta.faces.context.FacesContext) を呼び出すと true が返されるようにします。これは、NavigationHandler がこのメソッドを呼び出して、UIViewAction の結果としてナビゲーションが行われているかどうかを判別するために必要です。ActionListener.processAction(jakarta.faces.event.ActionEvent) を起動します。finally ブロックで、元の FacesContext を復元し、現在のコンテキストで isProcessingBroadcast(jakarta.faces.context.FacesContext) を呼び出すと false が返され、ラッパーが破棄されるようにします。

        processAction() の呼び出し中にレスポンスが完了とマークされた場合は、それ以上のアクションは実行せずに戻ります。それ以外の場合は、processAction() の呼び出し後に、FacesContext の UIViewRoot の viewId と viewIdBeforeAction を比較します。2 つの viewIds が同じで、decode(jakarta.faces.context.FacesContext) の呼び出しによってキューに入れられた UIViewAction イベントがもうない場合は、FacesContext.renderResponse() を呼び出して戻ります。キューに入れられた UIViewAction イベントの数は decode(jakarta.faces.context.FacesContext) の仕様で記録されているため、キューに入れられた UIViewAction イベントがもうない場合は検出できます。それ以外の場合は、新しい UIViewRoot でライフサイクルを実行します。

        オーバーライド:
        クラス UIComponentBasebroadcast 
        パラメーター:
        event - 放送予定の FacesEvent
        例外:
        AbortProcessingException - Jakarta Faces 実装に、現在のイベントでこれ以上の処理を実行しないことを通知します
        IllegalArgumentExceptionSE - この FacesEvent の実装クラスがこのコンポーネントでサポートされていない場合
        NullPointerExceptionSE - event が null の場合
        導入:
        2.2
      • decode

        public void decode​(FacesContext context)

        スーパークラスからの動作をオーバーライドして ActionEvent をキューに入れると、このインスタンスに関連付けられている action または actionListener が呼び出される可能性があります。

        次のいずれかの条件に該当する場合は、何もしないでください。

        • 現在のリクエストはポストバックであり、インスタンスはポストバックで動作しないように設定されています。isOnPostback() を参照してください。

        • if プロパティに記述されている条件は false と評価されます。isRendered() を参照

          .

        ActionEvent をインスタンス化し、このコンポーネントインスタンスをソースとして渡します。ActionEvent の phaseId プロパティを次のように設定します。

        • このコンポーネントインスタンスが setPhase(java.lang.String) への呼び出しを伴う特定のライフサイクルフェーズで構成されている場合は、それを phaseId として使用します。

        • immediate プロパティの値が true の場合は、PhaseId.APPLY_REQUEST_VALUES を使用します。

        • それ以外の場合は、PhaseId.INVOKE_APPLICATION を使用します。

        UIComponentBase.queueEvent(jakarta.faces.event.FacesEvent) を呼び出してイベントをキューに入れます。ライフサイクルを通じて、この実行でこのようにキューに入れられたイベントの数を追跡します。この情報は、broadcast(jakarta.faces.event.FacesEvent) での処理中に必要です。

        オーバーライド:
        クラス UIComponentBasedecode 
        パラメーター:
        context - FacesContext(処理中のリクエスト)
        導入:
        2.2