15

When should one use the preRenderView event to initialize data for a page versus using the viewAction? Are they equal in use and do they have the same effect?

preRenderView Event

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

or

viewAction

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

1 に答える 1

22

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

  1. onPostback:viewActionこの属性を使用すると、同じビューへのポストバック (つまり、ページの更新やボタンの送信など) でアクションを実行するかどうかを指定できます。デフォルトでは に設定され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: この属性により、(デフォルト フェーズとは異なり) フェーズviewAction中に を実行できるようになり、通常のように動作できるようになりました。APPLY_REQUEST_VALUESINVOKE_APPLICATIONUIComponent

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

于 2014-06-30T18:56:05.593 に答える