Jsf 2 何时使用preRenderView与viewAction?
什么时候应该使用preRenderView事件初始化页面数据,而不是使用viewAction?它们的用途相同吗?它们有相同的效果吗 预渲染视图事件Jsf 2 何时使用preRenderView与viewAction?,jsf-2,jsf-2.2,prerenderview,Jsf 2,Jsf 2.2,Prerenderview,什么时候应该使用preRenderView事件初始化页面数据,而不是使用viewAction?它们的用途相同吗?它们有相同的效果吗 预渲染视图事件 <f:metadata> <f:event type="preRenderView" listener="#{myBean.initialize}"/> </f:metadata> 或 查看操作 <f:metadata> <f:viewAction action="#{myBean.
<f:metadata>
<f:event type="preRenderView" listener="#{myBean.initialize}"/>
</f:metadata>
或
查看操作
<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>
阶段
:此属性允许您指定在特定JSF阶段执行操作。它默认为INVOKE\u APPLICATION
,但所有其他JSF阶段ID在这里都有效如果
:此属性允许您提供计算结果为布尔结果的值表达式。视图操作将仅在此表达式的结果上执行立即
:此属性现在授予在应用请求值
阶段执行查看操作
的能力(与默认的调用应用程序
阶段不同),使其行为类似于常规的UIComponent
总之,
viewAction
是执行视图命令的一种更简洁的设计方法 带有
标记的rendered=“…”
技巧对我不起作用(在带有Mojarra 2.2.11的Wildfly 9.0上)。根据没有呈现的
-属性。它没有@MartinHöller文档记录,但我(在我写这个答案时)在GF4上有JSF2.2,并且标记确实带有呈现的
属性。可能是开发人员的疏忽可能bahavior使用了一些次要版本进行了更改,但我尝试了rendered=“false”
,并且每次请求视图时都会调用通过侦听器指定的方法。