public class UIViewAction extends UIComponentBase implements ActionSource2
UIViewAction は、ポストバックではなく、通常は最初のリクエストにレスポンスして、リクエスト処理ライフサイクル中に発生するメソッド呼び出しを表します。
ViewDeclarationLanguage 実装では、<f:metadata /> 要素内に配置された <f:viewAction /> 要素が出現するたびに、このコンポーネントのインスタンスをビューに配置する必要があります。ユーザーは <f:metadata /> を UIViewRoot の直接の子として配置する必要があります。
このクラスは ActionSource2 を実装するため、UICommand などの ActionSource2 を実装するコンポーネントに対して通常実行されるアクションは、このクラスのインスタンスに対して有効です。このクラスのインスタンスは、Ajax リクエストを含む通常の Jakarta Server Faces ライフサイクルに参加します。
このコンポーネントの目的は、Jakarta Server Faces ビューのロード時にコードを実行して、システムサービス、コンテンツの取得、ビューの管理、ナビゲーションの統合をサポートする軽量のフロントコントローラーソリューションを提供することです。この機能は、非顔(初期)リクエストに特に役立ちます。
このコンポーネントの最も一般的な使用例は、多くの場合 1 つ以上の UIViewParameter を使用して、特定のビューに必要なアクションを実行することです。
アクションが呼び出された後、アクションシグネチャーと結果に一致するナビゲーションケースを実行するために NavigationHandler が参照されます。新しい viewId が現在の viewId と異なるナビゲーションケースが一致する場合、異なる viewId を持つ一致したナビゲーションケースがリダイレクトを呼び出しているかどうかに関係なく、ランタイムは異なる viewId を持つ一致したナビゲーションケースへのリダイレクトを強制する必要があります。ナビゲーションによってフロー遷移が発生する場合は、リダイレクトのクエリ文字列に適切なメタデータを含める必要があります。<redirect /> ケースの処理方法については、セクション JSF.7.4.2 デフォルトの NavigationHandler アルゴリズムを参照してください。
UIViewAction コンポーネントが非面(初期)リクエストで処理される前に、完全なコンポーネントツリーが構築されないことに注意することが重要です。むしろ、コンポーネントツリーには ViewMetadata のみが含まれています。これは、このコンポーネントの最適化の重要な部分であり、PreRenderViewEvent リスナーと区別されるものです。
| 修飾子と型 | フィールドと説明 |
|---|---|
static StringSE | COMPONENT_FAMILY このコンポーネントの標準コンポーネントファミリ。 |
static StringSE | COMPONENT_TYPE このコンポーネントの標準コンポーネント型。 |
ATTRS_WITH_DECLARED_DEFAULT_VALUES, BEANINFO_KEY, bindings, COMPOSITE_COMPONENT_TYPE_KEY, COMPOSITE_FACET_NAME, CURRENT_COMPONENT, CURRENT_COMPOSITE_COMPONENT, FACETS_KEY, HONOR_CURRENT_COMPONENT_ATTRIBUTES_PARAM_NAME, VIEW_LOCATION_KEY| コンストラクターと説明 |
|---|
UIViewAction() デフォルトのプロパティ値で新しい UIViewAction インスタンスを作成します。 |
| 修飾子と型 | メソッドと説明 |
|---|---|
void | addActionListener(ActionListener listener) 新しい ActionListener を、ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットに追加します。 |
void | broadcast(FacesEvent event) このコンポーネントインスタンスによって指定されたメソッド呼び出しを有効にして、 |
void | decode(FacesContext context) スーパークラスからの動作をオーバーライドして |
MethodBinding | getAction() 使用すべきではありません。 |
MethodExpression | getActionExpression()immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、ユーザーがこの UIComponent をアクティブ化した場合、呼び出されるアプリケーションアクションを指す MethodExpression を返します。 |
MethodBinding | getActionListener() 使用すべきではありません。 |
ActionListener[] | getActionListeners() この ActionSource インスタンスに登録されている ActionListener のセットを返します。 |
StringSE | getFamily()このコンポーネントが属するコンポーネントファミリの識別子を返します。 |
StringSE | getPhase()アクションがキューに入れられるライフサイクルフェーズの名前を返します。 |
boolean | isImmediate() コンポーネントの |
boolean | isOnPostback()
|
static boolean | isProcessingBroadcast(FacesContext context) 現在のリクエスト処理ライフサイクルが |
boolean | isRendered() このコンポーネントが |
void | removeActionListener(ActionListener listener)ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットから既存の ActionListener(存在する場合)を削除します。 |
void | setAction(MethodBinding action) 使用すべきではありません。 |
void | setActionExpression(MethodExpression actionExpression)immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、この UIComponent がユーザーによってアクティブ化された場合に呼び出されるアプリケーションアクションを指す MethodExpression を設定します。 |
void | setActionListener(MethodBinding actionListener) 使用すべきではありません。 |
void | setImmediate(boolean immediate) この UIComponent の「即時実行」フラグを設定します。 |
void | setOnPostback(boolean onPostback)このコンポーネントがポストバックで動作するかどうかを制御します。 |
void | setPhase(StringSE phase) このインスタンスが |
void | setRendered(boolean condition) このコンポーネントの |
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, getValueBinding, invokeOnComponent, isTransient, markInitialState, processDecodes, processRestoreState, processSaveState, processUpdates, processValidators, queueEvent, removeFacesListener, restoreAttachedState, restoreState, saveAttachedState, saveState, setId, setParent, setRendererType, setTransient, setValueBinding, subscribeToEvent, unsubscribeFromEventencodeAll, getClientId, getCompositeComponentParent, getContainerClientId, getCurrentComponent, getCurrentCompositeComponent, getNamingContainer, getPassThroughAttributes, getResourceBundleMap, getStateHelper, getStateHelper, getTransientStateHelper, getTransientStateHelper, getValueExpression, initialStateMarked, isCompositeComponent, isInView, isVisitable, popComponentFromEL, processEvent, pushComponentToEL, restoreTransientState, saveTransientState, setInView, setValueExpression, visitTreecloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSEpublic UIViewAction()
デフォルトのプロパティ値で新しい UIViewAction インスタンスを作成します。
public StringSE getFamily()
UIComponent このコンポーネントが属するコンポーネントファミリの識別子を返します。この識別子は、rendererType プロパティの値と組み合わせて、このコンポーネントインスタンスに適切な Renderer を選択するために使用できます。このメソッドは null を返すべきではないことに注意してください
UIComponent の getFamily @DeprecatedSE public MethodBinding getAction()
実装クラスも ActionSource2 を実装している場合、このメソッドの実装は ActionSource2.getActionExpression() を呼び出して結果を調べる必要があります。以前の ActionSource.setAction(javax.faces.el.MethodBinding) の呼び出しの結果が返された場合は、そこから MethodBinding を抽出して返します。それ以外の場合は、返された MethodExpression を MethodBinding 実装でラップして返します。
実装クラスが ActionSource2 を実装していない場合は、呼び出されるアプリケーションアクションを指す MethodBinding を返します。この UIComponent がユーザーによってアクティブ化されている場合、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、immediate プロパティ。
ActionSource の getAction @DeprecatedSE public void setAction(MethodBinding action)
実装クラスが ActionSource2 も実装する場合、このメソッドの実装は、MethodExpression を実装するクラスで引数 action をラップし、ラップされた action を渡して ActionSource2.setActionExpression(javax.el.MethodExpression) を呼び出す必要があります。
実装クラスが ActionSource2 を実装していない場合、MethodBinding がアプリケーションアクションを指すように設定します。この UIComponent がユーザーによってアクティブ化された場合、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、immediate プロパティ。
このような式で参照されるメソッドはすべて、String の戻り値の型でパブリックであり、パラメーターを受け入れない必要があります。
ActionSource の setAction action - 新しい MethodBinding 式 @DeprecatedSE public MethodBinding getActionListener()
このインスタンスに対して ActionSource.setActionListener(javax.faces.el.MethodBinding) が以前に呼び出されていなかった場合、このメソッドは null を返す必要があります。呼び出された場合、このメソッドは ActionSource.setActionListener(javax.faces.el.MethodBinding) に渡された正確な MethodBinding インスタンスを返す必要があります。
呼び出されるメソッドは、この UIComponent がユーザーによってアクティブ化された場合、immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に呼び出されます。
ActionSource の getActionListener @DeprecatedSE public void setActionListener(MethodBinding actionListener)
引数 actionListener を ActionListener の実装にラップし、ActionSource.getActionListeners() メソッドをサポートする内部データ構造に格納します。setActionListener への以前の呼び出しによって格納されたインスタンスを上書きすることに注意してください。
このような式で参照されるメソッドは、戻り値の型が void のパブリックであり、型 ActionEvent の単一のパラメーターを受け入れる必要があります。
ActionSource の setActionListener actionListener - 新しいメソッドバインディング式 public boolean isImmediate()
コンポーネントの immediate 属性の値が true の場合、アクションはリクエスト値の適用 Jakarta Server Faces ライフサイクルフェーズ中に呼び出されます。それ以外の場合は、デフォルトの動作であるアプリケーションの起動フェーズでアクションが呼び出されます。フェーズは、immediate 属性よりも優先される phase 属性で明示的に設定できます。
ActionSource の isImmediate true、それ以外の場合は false。public void setImmediate(boolean immediate)
この UIComponent の「即時実行」フラグを設定します。
ActionSource の setImmediate immediate - 新しい即時実行フラグ public StringSE getPhase()
アクションがキューに入れられるライフサイクルフェーズの名前を返します。
public void setPhase(StringSE phase)
このインスタンスが ActionEvent をキューに入れるライフサイクルフェーズを設定しようとします。引数 phase を PhaseId.phaseIdValueOf(java.lang.String) に渡します。結果が次のいずれの値でもない場合は、FacesException をスローする必要があります。
設定されている場合、この値は即時フラグよりも優先されます。
phase - フェーズ ID(文字列値として)。public static boolean isProcessingBroadcast(FacesContext context)
現在のリクエスト処理ライフサイクルが decode(javax.faces.context.FacesContext) の呼び出し中にキューに入れられたイベントのブロードキャストを処理している最中にある場合は、true を返します。broadcast(javax.faces.event.FacesEvent) の実装は、このメソッドの呼び出しがこの事実を正確に反映することを保証する責任があります。
context - 現在のリクエストの FacesContexttrue は現在ブロードキャストを処理しています。false はそれ以外の場合です。public void addActionListener(ActionListener listener)
新しい ActionListener を、ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットに追加します。
ActionSource の addActionListener listener - 追加する ActionListenerpublic ActionListener[] getActionListeners()
この ActionSource インスタンスに登録されている ActionListener のセットを返します。登録済みのリスナーがない場合は、長さ 0 の配列が返されます。
ActionSource の getActionListeners public void removeActionListener(ActionListener listener)
ActionEvent の発生時に通知を受けることに関心のあるリスナーのセットから既存の ActionListener(存在する場合)を削除します。
ActionSource の removeActionListener listener - 削除する ActionListenerpublic MethodExpression getActionExpression()
immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、ユーザーがこの UIComponent をアクティブ化した場合、呼び出されるアプリケーションアクションを指す MethodExpression を返します。
返される MethodExpression が、ActionSource.setAction(javax.faces.el.MethodBinding) の呼び出しによって設定された MethodBinding インスタンスの単なるラッパーである可能性があることに注意してください。これにより、デフォルトの ActionListener が古いコンポーネントで適切に機能し続けることが可能になります。
ActionSource2 の getActionExpression public void setActionExpression(MethodExpression actionExpression)
immediate プロパティの値に応じて、リクエスト処理ライフサイクルのリクエスト値の適用フェーズまたはアプリケーションの呼び出しフェーズ中に、この UIComponent がユーザーによってアクティブ化された場合に呼び出されるアプリケーションアクションを指す MethodExpression を設定します。
このような式で参照されるメソッドはすべて、String の戻り値の型でパブリックであり、パラメーターを受け入れない必要があります。
ActionSource2 の setActionExpression actionExpression - アクション式。public boolean isOnPostback()
true の場合、このコンポーネントはポストバックで動作します。
true、それ以外の場合は false。public void setOnPostback(boolean onPostback)
このコンポーネントがポストバックで動作するかどうかを制御します。
onPostback - onPostback フラグ。public boolean isRendered()
このコンポーネントが decode(javax.faces.context.FacesContext) メソッドで指定されたアクションを実行する必要がある場合は、true を返します。
UIComponentBase の isRendered true、それ以外の場合は false。public void setRendered(boolean condition)
このコンポーネントの if プロパティを設定します。
UIComponentBase の setRendered condition - プロパティの新しい値。public void broadcast(FacesEvent event) throws AbortProcessingException
このコンポーネントインスタンスによって指定されたメソッド呼び出しを有効にして、UICommand.broadcast(javax.faces.event.FacesEvent) と同様に、ナビゲーションを実行する値を返します。
次の条件のいずれかに該当する場合は、何もせずにすぐに戻ります。
レスポンスはすでに完了としてマークされています。
現在の UIViewRoot は、イベントのソースの UIViewRoot とは異なります。
現在の UIViewRoot の viewId へのローカル参照を保存します。説明のため、この参照を viewIdBeforeAction とします。
Application から ActionListener を取得します。アクションを実行しないように、FacesContext.renderResponse() メソッドをオーバーライドする FacesContextWrapper の実装に現在の FacesContext をラップします。現在の FacesContext を FacesContextWrapper インスタンスに設定します。現在の FacesContext で isProcessingBroadcast(javax.faces.context.FacesContext) を呼び出すと true が返されるようにします。これは、NavigationHandler がこのメソッドを呼び出して、UIViewAction の結果としてナビゲーションが行われているかどうかを判別するために必要です。ActionListener.processAction(javax.faces.event.ActionEvent) を起動します。finally ブロックで、元の FacesContext を復元し、現在のコンテキストで isProcessingBroadcast(javax.faces.context.FacesContext) を呼び出すと false が返され、ラッパーが破棄されるようにします。
processAction() の呼び出し中にレスポンスが完了とマークされた場合は、それ以上のアクションは実行せずに戻ります。それ以外の場合は、processAction() の呼び出し後に、FacesContext の UIViewRoot の viewId と viewIdBeforeAction を比較します。2 つの viewIds が同じで、decode(javax.faces.context.FacesContext) の呼び出しによってキューに入れられた UIViewAction イベントがもうない場合は、FacesContext.renderResponse() を呼び出して戻ります。キューに入れられた UIViewAction イベントの数は decode(javax.faces.context.FacesContext) の仕様で記録されているため、キューに入れられた UIViewAction イベントがもうない場合は検出できます。それ以外の場合は、新しい UIViewRoot でライフサイクルを実行します。
UIComponentBase の broadcast event - 放送予定の FacesEventAbortProcessingException - Jakarta Server Faces 実装に、現在のイベントでこれ以上の処理を実行しないことを通知します IllegalArgumentExceptionSE - この FacesEvent の実装クラスがこのコンポーネントでサポートされていない場合 NullPointerExceptionSE - event が null の場合 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(javax.faces.event.FacesEvent) を呼び出してイベントをキューに入れます。ライフサイクルを通じて、この実行でこのようにキューに入れられたイベントの数を追跡します。この情報は、broadcast(javax.faces.event.FacesEvent) での処理中に必要です。
UIComponentBase の decode context - FacesContext(処理中のリクエスト)Copyright © 2019 Eclipse Foundation.
Use is subject to license terms.