web-dev-qa-db-ja.com

preRenderViewとviewActionをいつ使用するのですか?

ViewActionを使用するのではなく、preRenderViewイベントを使用してページのデータを初期化する必要があるのはいつですか?それらは同じように使用され、同じ効果がありますか?

preRenderViewイベント

<f:metadata>
  <f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>

または

viewAction

<f:metadata>
  <f:viewAction action="#{myBean.initialize}"/>
</f:metadata>
15
Dimitri Dewaele

実際には、これらを使用して同じ効果を実現できますが、viewAction(JSF2.2の新機能)には次の機能拡張が含まれています。

  1. onPostbackviewActionにはこの属性が付属しており、同じビューへのポストバック時(つまり、ページの更新時)にアクションを実行するかどうかを指定できます。またはボタン送信など)。デフォルトはfalseであるため、必要がない場合は指定する必要もありません。 preRenderViewで同じ効果を得るには、次のものが必要です。

     <f:metadata>
         <f:event type="preRenderView" rendered="#{facesContext.postBack}" listener="#{myBean.initialize}"/>
     </f:metadata>
    
  2. phase:この属性を使用すると、特定のJSFフェーズ中にアクションを実行するように指定できます。デフォルトはINVOKE_APPLICATIONですが、他のすべてのJSFフェーズIDはここで有効です。

  3. if:この属性を使用すると、ブール結果に評価される値式を指定できます。ビューアクションは、この式の結果に対してのみ実行されます。

  4. immediate:この属性により、APPLY_REQUEST_VALUESフェーズ中にviewActionを実行できるようになりました(デフォルトのINVOKE_APPLICATIONフェーズとは異なります)。 )、通常のUIComponentのように動作できるようにします

全体として、viewActionは、表示コマンドを実行するためのよりクリーンな設計アプローチです。

21
kolossus