15

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

preRenderView 事件

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

或者

查看动作

<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期间执行a 的能力APPLY_REQUEST_VALUES(相对于默认INVOKE_APPLICATION阶段),使其表现得像常规UIComponent

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

于 2014-06-30T18:56:05.593 回答