ViewActionを使用するのではなく、preRenderViewイベントを使用してページのデータを初期化する必要があるのはいつですか?それらは同じように使用され、同じ効果がありますか?
preRenderViewイベント
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
または
viewAction
<f:metadata>
<f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
実際には、これらを使用して同じ効果を実現できますが、viewAction
(JSF2.2の新機能)には次の機能拡張が含まれています。
onPostback
:viewAction
にはこの属性が付属しており、同じビューへのポストバック時(つまり、ページの更新時)にアクションを実行するかどうかを指定できます。またはボタン送信など)。デフォルトはfalse
であるため、必要がない場合は指定する必要もありません。 preRenderView
で同じ効果を得るには、次のものが必要です。
<f:metadata>
<f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/>
</f:metadata>
phase
:この属性を使用すると、特定のJSFフェーズ中にアクションを実行するように指定できます。デフォルトはINVOKE_APPLICATION
ですが、他のすべてのJSFフェーズIDはここで有効です。
if
:この属性を使用すると、ブール結果に評価される値式を指定できます。ビューアクションは、この式の結果に対してのみ実行されます。
immediate
:この属性により、APPLY_REQUEST_VALUES
フェーズ中にviewAction
を実行できるようになりました(デフォルトのINVOKE_APPLICATION
フェーズとは異なります)。 )、通常のUIComponent
のように動作できるようにします
全体として、viewAction
は、表示コマンドを実行するためのよりクリーンな設計アプローチです。