Jsf Omnifaces上的侦听器preInvokeAction/postInvokeAction未在没有viewParam的情况下调用
我不能100%确定这是否符合设计要求,但视图元数据中的preInvokeAction侦听器似乎只有在存在viewParam时才会被调用 以下工作:Jsf Omnifaces上的侦听器preInvokeAction/postInvokeAction未在没有viewParam的情况下调用,jsf,omnifaces,Jsf,Omnifaces,我不能100%确定这是否符合设计要求,但视图元数据中的preInvokeAction侦听器似乎只有在存在viewParam时才会被调用 以下工作: <f:metadata> <f:viewParam name="test" value="#{myForm.myValue}"/> <f:event type="preInvokeAction" listener="#{myController.initializeForm}"/> </f:m
<f:metadata>
<f:viewParam name="test" value="#{myForm.myValue}"/>
<f:event type="preInvokeAction" listener="#{myController.initializeForm}"/>
</f:metadata>
但这并不是:
<f:metadata>
<f:event type="preInvokeAction" listener="#{myController.initializeForm}"/>
</f:metadata>
如果没有视图参数,则可能不存在invokeAction阶段,因此它没有意义,但我对这一级别的生命周期还不够熟悉,不知道是这样还是只是一个失误
一种解决方法是只输入一个伪参数
有人知道这是一个bug还是像预期的那样吗 它确实在按设计工作 这些事件在
INVOKE\u应用程序
阶段触发。当在RESTORE\u view
阶段没有发现视图参数时,JSF将立即进入RENDER\u RESPONSE
阶段。将跳过其间的所有阶段:应用请求值
,处理验证
,更新模型值
和调用应用程序
解决方法实际上是声明一个“虚拟的”
,或者更好地使用JSF2.2提供的
,如中所述
请注意,
不一定需要bean属性
<f:viewParam name="test" />
它将隐式地放在请求范围中,并作为{test}
提供
另见:
<f:viewParam name="test" />