何时使用preRenderView与viewAction?

时间:2014-06-30 12:27:38

标签: jsf-2 jsf-2.2 prerenderview

何时应该使用preRenderView事件来初始化页面的数据而不是使用viewAction?它们在使用上是否相同,是否具有相同的效果?

preRenderView活动

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

的viewAction

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

1 个答案:

答案 0 :(得分:20)

在实践中,它们可用于实现相同的效果,但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_VALUES的能力(与默认{{ 1}}阶段),使其表现得像常规INVOKE_APPLICATION

  5. 总的来说,UIComponent是一种执行视图命令的更简洁的设计方法。