クラス UIViewAction
- 実装済みのインターフェース一覧:
ActionSource、PartialStateHolder、StateHolder、TransientStateHolder、ComponentSystemEventListener、FacesListener、SystemEventListenerHolder、EventListenerSE
UIViewAction は、ポストバックではなく、通常は最初のリクエストにレスポンスして、リクエスト処理ライフサイクル中に発生するメソッド呼び出しを表します。
ViewDeclarationLanguage 実装では、<f:metadata /> 要素内に配置された <f:viewAction /> 要素が出現するたびに、このコンポーネントのインスタンスをビューに配置する必要があります。ユーザーは <f:metadata /> を UIViewRoot の直接の子として配置する必要があります。
このクラスは ActionSource を実装するため、UICommand などの ActionSource を実装するコンポーネントに対して通常実行されるアクションは、このクラスのインスタンスに対して有効です。このクラスのインスタンスは、Ajax リクエストを含む通常の Jakarta Faces ライフサイクルに参加します。
このコンポーネントの目的は、Jakarta Faces ビューのロード時にコードを実行して、システムサービス、コンテンツの取得、ビューの管理、ナビゲーションの統合をサポートする軽量のフロントコントローラーソリューションを提供することです。この機能は、非顔(初期)リクエストに特に役立ちます。
このコンポーネントの最も一般的な使用例は、多くの場合 1 つ以上の UIViewParameter を使用して、特定のビューに必要なアクションを実行することです。
アクションが呼び出された後、アクションシグネチャーと結果に一致するナビゲーションケースを実行するために NavigationHandler が参照されます。ナビゲーションケースが一致して新しい viewId が現在の viewId と異なる場合、異なる viewId を持つ一致したナビゲーションケースがリダイレクトを呼び出しているかどうかに関係なく、ランタイムは異なる viewId を持つ一致したナビゲーションケースへのリダイレクトを強制する必要があります。ナビゲーションによってフロー遷移が発生する場合は、リダイレクトのクエリ文字列に適切なメタデータを含める必要があります。<redirect /> ケースの処理方法の仕様については、Jakarta Faces Specification Document のセクション 7.4.2「デフォルトの NavigationHandler アルゴリズム」を参照してください。
UIViewAction コンポーネントが非面(初期)リクエストで処理される前に、完全なコンポーネントツリーが構築されないことに注意することが重要です。むしろ、コンポーネントツリーには ViewMetadata のみが含まれています。これは、このコンポーネントの最適化の重要な部分であり、PreRenderViewEvent リスナーと区別されるものです。
- 導入:
- 2.2
フィールド概要
フィールド修飾子と型フィールド説明static final StringSEこのコンポーネントの標準コンポーネントファミリ。static final StringSEこのコンポーネントの標準コンポーネント型。クラス jakarta.faces.component.UIComponent から継承されたフィールド
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, FACETS_KEY, VIEW_LOCATION_KEYコンストラクター概要
コンストラクター方法の概要
修飾子と型メソッド説明voidaddActionListener(ActionListener listener) 新しいActionListenerを、ActionEventの発生時に通知を受けることに関心のあるリスナーのセットに追加します。voidbroadcast(FacesEvent event) このコンポーネントインスタンスによって指定されたメソッド呼び出しを有効にして、UICommand.broadcast(jakarta.faces.event.FacesEvent)と同様に、ナビゲーションを実行する値を返します。voiddecode(FacesContext context) スーパークラスからの動作をオーバーライドしてActionEventをキューに入れると、このインスタンスに関連付けられているactionまたはactionListenerが呼び出される可能性があります。immediateプロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、ユーザーがこのUIComponentをアクティブ化した場合、呼び出されるアプリケーションアクションを指すMethodExpressionを返します。このActionSourceインスタンスに登録されているActionListenerのセットを返します。このコンポーネントが属するコンポーネントファミリの識別子を返します。getPhase()アクションがキューに入れられるライフサイクルフェーズの名前を返します。booleanコンポーネントのimmediate属性の値がtrueの場合、アクションはリクエスト値の適用 Jakarta Faces ライフサイクルフェーズ中に呼び出されます。booleantrueの場合、このコンポーネントはポストバックで動作します。static booleanisProcessingBroadcast(FacesContext context) 現在のリクエスト処理ライフサイクルがdecode(jakarta.faces.context.FacesContext)の呼び出し中にキューに入れられたイベントのブロードキャストを処理している最中にある場合、trueを返します。booleanこのコンポーネントのifプロパティを返します。voidremoveActionListener(ActionListener listener) ActionEventの発生時に通知を受けることに関心のあるリスナーのセットから既存のActionListener(存在する場合)を削除します。voidsetActionExpression(MethodExpression actionExpression) immediateプロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、このUIComponentがユーザーによってアクティブ化された場合に呼び出されるアプリケーションアクションを指すMethodExpressionを設定します。voidsetImmediate(boolean immediate) このUIComponentの「即時実行」フラグを設定します。voidsetOnPostback(boolean onPostback) このコンポーネントがポストバックで動作するかどうかを制御します。voidこのインスタンスがActionEventをキューに入れるライフサイクルフェーズを設定しようとします。voidsetRendered(boolean condition) このコンポーネントのifプロパティを設定します。クラス jakarta.faces.component.UIComponentBase から継承されたメソッド
addClientBehavior, addFacesListener, clearInitialState, encodeBegin, encodeChildren, encodeEnd, findComponent, getAttributes, getChildCount, getChildren, getClientBehaviors, getClientId, getDefaultEventName, getEventNames, getFacesContext, getFacesListeners, getFacet, getFacetCount, getFacets, getFacetsAndChildren, getId, getListenersForEventClass, getParent, getPassThroughAttributes, getRenderer, getRendererType, getRendersChildren, invokeOnComponent, isTransient, markInitialState, processDecodes, processRestoreState, processSaveState, processUpdates, processValidators, queueEvent, removeFacesListener, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendererType, setTransient, subscribeToEvent, unsubscribeFromEventクラス jakarta.faces.component.UIComponent から継承されたメソッド
encodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression, visitTree
フィールドの詳細
コンストラクターの詳細
UIViewAction
public UIViewAction()デフォルトのプロパティ値で新しい
UIViewActionインスタンスを作成します。
方法の詳細
getFamily
クラスからコピーされた説明:UIComponentこのコンポーネントが属するコンポーネントファミリの識別子を返します。この識別子は、
rendererTypeプロパティの値と組み合わせて、このコンポーネントインスタンスに適切なRendererを選択するために使用できます。このメソッドはnullを返すべきではないことに注意してください- 次で指定:
- クラス
UIComponentのgetFamily - 戻り値:
- コンポーネントファミリ(null 以外)。
isImmediate
public boolean isImmediate()コンポーネントの
immediate属性の値がtrueの場合、アクションはリクエスト値の適用 Jakarta Faces ライフサイクルフェーズ中に呼び出されます。それ以外の場合は、デフォルトの動作であるアプリケーションの起動フェーズでアクションが呼び出されます。フェーズは、immediate属性よりも優先されるphase属性で明示的に設定できます。- 次で指定:
- インターフェース
ActionSource内のisImmediate - 戻り値:
- 即時の場合は
true、それ以外の場合はfalse。 - 導入:
- 2.2
setImmediate
public void setImmediate(boolean immediate) この
UIComponentの「即時実行」フラグを設定します。- 次で指定:
- インターフェース
ActionSource内のsetImmediate - パラメーター:
immediate- 新しい即時実行フラグ- 導入:
- 2.2
getPhase
アクションがキューに入れられるライフサイクルフェーズの名前を返します。
- 戻り値:
- フェーズ(文字列として)。
- 導入:
- 2.2
setPhase
このインスタンスが
ActionEventをキューに入れるライフサイクルフェーズを設定しようとします。引数phaseをPhaseId.phaseIdValueOf(java.lang.String)に渡します。結果が次のいずれの値でもない場合は、FacesExceptionをスローする必要があります。設定されている場合、この値は即時フラグよりも優先されます。
- パラメーター:
phase- フェーズ ID(文字列値として)。- 導入:
- 2.2
isProcessingBroadcast
現在のリクエスト処理ライフサイクルが
decode(jakarta.faces.context.FacesContext)の呼び出し中にキューに入れられたイベントのブロードキャストを処理している最中にある場合は、trueを返します。broadcast(jakarta.faces.event.FacesEvent)の実装は、このメソッドの呼び出しがこの事実を正確に反映することを保証する責任があります。- パラメーター:
context- 現在のリクエストのFacesContext- 戻り値:
trueは現在ブロードキャストを処理しています。falseはそれ以外の場合です。- 導入:
- 2.2
addActionListener
新しい
ActionListenerを、ActionEventの発生時に通知を受けることに関心のあるリスナーのセットに追加します。- 次で指定:
- インターフェース
ActionSource内のaddActionListener - パラメーター:
listener- 追加するActionListener- 導入:
- 2.2
getActionListeners
この
ActionSourceインスタンスに登録されているActionListenerのセットを返します。登録済みのリスナーがない場合は、長さ 0 の配列が返されます。- 次で指定:
- インターフェース
ActionSource内のgetActionListeners - 戻り値:
- アクションリスナー、または長さゼロの配列。
- 導入:
- 2.2
removeActionListener
ActionEventの発生時に通知を受けることに関心のあるリスナーのセットから既存のActionListener(存在する場合)を削除します。- 次で指定:
- インターフェース
ActionSource内のremoveActionListener - パラメーター:
listener- 削除するActionListener- 導入:
- 2.2
getActionExpression
immediateプロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、ユーザーがこのUIComponentをアクティブ化した場合、呼び出されるアプリケーションアクションを指すMethodExpressionを返します。デフォルトの実装は
UnsupportedOperationExceptionをスローし、ActionSourceを継承する既存のアプリケーションを壊さないという唯一の目的で提供されています。歴史的に、このメソッドはまさにこの理由からActionSource2で宣言されていましたが、インターフェースのデフォルトメソッドはサポートされていませんでした。- 次で指定:
- インターフェース
ActionSource内のgetActionExpression - 戻り値:
- アクション式。
- 導入:
- 2.2
setActionExpression
immediateプロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、このUIComponentがユーザーによってアクティブ化された場合に呼び出されるアプリケーションアクションを指すMethodExpressionを設定します。このような式で参照されるメソッドはすべて、
Stringの戻り値の型でパブリックであり、パラメーターを受け入れない必要があります。デフォルトの実装は
UnsupportedOperationExceptionをスローし、ActionSourceを継承する既存のアプリケーションを壊さないという唯一の目的で提供されています。歴史的に、このメソッドはまさにこの理由からActionSource2で宣言されていましたが、インターフェースのデフォルトメソッドはサポートされていませんでした。- 次で指定:
- インターフェース
ActionSource内のsetActionExpression - パラメーター:
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)メソッドで指定されたアクションを実行する必要があります。- オーバーライド:
- クラス
UIComponentBaseのisRendered - 戻り値:
- アクションを実行する必要がある場合は
true、それ以外の場合はfalse。 - 導入:
- 2.2
setRendered
public void setRendered(boolean condition) このコンポーネントの
ifプロパティを設定します。- オーバーライド:
- クラス
UIComponentBaseのsetRendered - パラメーター:
condition- プロパティの新しい値。- 導入:
- 2.2
broadcast
このコンポーネントインスタンスによって指定されたメソッド呼び出しを有効にして、
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でライフサイクルを実行します。- オーバーライド:
- クラス
UIComponentBaseのbroadcast - パラメーター:
event- 放送予定のFacesEvent- 例外:
AbortProcessingException- Jakarta Faces 実装に、現在のイベントでこれ以上の処理を実行しないことを通知しますIllegalArgumentExceptionSE- このFacesEventの実装クラスがこのコンポーネントでサポートされていない場合NullPointerExceptionSE-eventがnullの場合- 導入:
- 2.2
decode
スーパークラスからの動作をオーバーライドして
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)での処理中に必要です。- オーバーライド:
- クラス
UIComponentBaseのdecode - パラメーター:
context-FacesContext(処理中のリクエスト)- 導入:
- 2.2