Jsf Omnifaces上的侦听器preInvokeAction/postInvokeAction未在没有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

我不能100%确定这是否符合设计要求,但视图元数据中的preInvokeAction侦听器似乎只有在存在viewParam时才会被调用

以下工作:

<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" />