パッケージ jakarta.faces.component

クラス UIViewAction

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

public class UIViewAction extends UIComponentBase implements ActionSource

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

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

このクラスは ActionSource を実装するため、UICommand などの ActionSource を実装するコンポーネントに対して通常実行されるアクションは、このクラスのインスタンスに対して有効です。このクラスのインスタンスは、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
  • フィールドの詳細

  • コンストラクターの詳細

    • 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
    • setPhase

      public void setPhase(StringSE phase)

      このインスタンスが ActionEvent をキューに入れるライフサイクルフェーズを設定しようとします。引数 phase を PhaseId.phaseIdValueOf(java.lang.String) に渡します。結果が次のいずれの値でもない場合は、FacesException をスローする必要があります。

      設定されている場合、この値は即時フラグよりも優先されます。

      パラメーター:
      phase - フェーズ ID(文字列値として)。
      導入:
      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
    • addActionListener

      public void addActionListener(ActionListener listener)

      新しい ActionListener を、ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットに追加します。

      次で指定:
      インターフェース ActionSourceaddActionListener 
      パラメーター:
      listener - 追加する ActionListener
      導入:
      2.2
    • getActionListeners

      public ActionListener[] getActionListeners()

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

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

      public void removeActionListener(ActionListener listener)

      ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットから既存の ActionListener(存在する場合)を削除します。

      次で指定:
      インターフェース ActionSourceremoveActionListener 
      パラメーター:
      listener - 削除する ActionListener
      導入:
      2.2
    • getActionExpression

      public MethodExpression getActionExpression()

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

      デフォルトの実装は UnsupportedOperationException をスローし、ActionSource を継承する既存のアプリケーションを壊さないという唯一の目的で提供されています。歴史的に、このメソッドはまさにこの理由から ActionSource2 で宣言されていましたが、インターフェースのデフォルトメソッドはサポートされていませんでした。

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

      public void setActionExpression(MethodExpression actionExpression)

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

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

      デフォルトの実装は UnsupportedOperationException をスローし、ActionSource を継承する既存のアプリケーションを壊さないという唯一の目的で提供されています。歴史的に、このメソッドはまさにこの理由から ActionSource2 で宣言されていましたが、インターフェースのデフォルトメソッドはサポートされていませんでした。

      次で指定:
      インターフェース ActionSourcesetActionExpression 
      パラメーター:
      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()

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

      オーバーライド:
      クラス 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