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, unsubscribeFromEvent
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
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public 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
- 現在のリクエストの FacesContext
true
は現在ブロードキャストを処理しています。false
はそれ以外の場合です。public void addActionListener(ActionListener listener)
新しい ActionListener
を、ActionEvent
の発生時に通知を受けることに関心のあるリスナーのセットに追加します。
ActionSource
の addActionListener
listener
- 追加する ActionListener
public ActionListener[] getActionListeners()
この ActionSource
インスタンスに登録されている ActionListener
のセットを返します。登録済みのリスナーがない場合は、長さ 0 の配列が返されます。
ActionSource
の getActionListeners
public void removeActionListener(ActionListener listener)
ActionEvent
の発生時に通知を受けることに関心のあるリスナーのセットから既存の ActionListener
(存在する場合)を削除します。
ActionSource
の removeActionListener
listener
- 削除する ActionListener
public 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
- 放送予定の FacesEvent
AbortProcessingException
- 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.