Omnifaces preInvokeAction/postInvokeAction 上的侦听器在没有 viewParam 的情况下未被调用
Listener on Omnifaces preInvokeAction/postInvokeAction not invoked without viewParam
我不能 100% 确定这不是设计好的,但似乎只有存在 viewParam 时才会调用视图元数据中的 preInvokeAction 侦听器。
以下作品:
<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阶段不存在,所以没有意义,但我对这个级别的生命周期还不够熟悉,不知道是不是这样,或者如果这只是一个失误。
解决方法是输入一个虚假参数。
有谁知道这是错误还是符合预期?
它确实按设计工作。
这些事件在 INVOKE_APPLICATION
阶段触发。当在 RESTORE_VIEW
阶段没有发现视图参数时,JSF 将立即前进到 RENDER_RESPONSE
阶段。将跳过其间的所有阶段:APPLY_REQUEST_VALUES
、PROCESS_VALIDATIONS
、UPDATE_MODEL_VALUES
和 INVOKE_APPLICATION
.
解决方法确实是声明一个“虚拟”<f:viewParam>
,或者更好的是,使用 <f:viewAction>
提供的 JSF 2.2 而不是 InvokeActionEventListener
documentation.
中提到的
<f:viewAction action="#{myController.initializeForm}" />
请注意 <f:viewParam>
不一定需要 bean 属性。
<f:viewParam name="test" />
它将隐式地放置在请求范围内,并作为 #{test}
.
可用
另请参阅:
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
- Invoke JSF managed bean action on page load
我不能 100% 确定这不是设计好的,但似乎只有存在 viewParam 时才会调用视图元数据中的 preInvokeAction 侦听器。
以下作品:
<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阶段不存在,所以没有意义,但我对这个级别的生命周期还不够熟悉,不知道是不是这样,或者如果这只是一个失误。
解决方法是输入一个虚假参数。
有谁知道这是错误还是符合预期?
它确实按设计工作。
这些事件在 INVOKE_APPLICATION
阶段触发。当在 RESTORE_VIEW
阶段没有发现视图参数时,JSF 将立即前进到 RENDER_RESPONSE
阶段。将跳过其间的所有阶段:APPLY_REQUEST_VALUES
、PROCESS_VALIDATIONS
、UPDATE_MODEL_VALUES
和 INVOKE_APPLICATION
.
解决方法确实是声明一个“虚拟”<f:viewParam>
,或者更好的是,使用 <f:viewAction>
提供的 JSF 2.2 而不是 InvokeActionEventListener
documentation.
<f:viewAction action="#{myController.initializeForm}" />
请注意 <f:viewParam>
不一定需要 bean 属性。
<f:viewParam name="test" />
它将隐式地放置在请求范围内,并作为 #{test}
.
另请参阅:
- What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
- Invoke JSF managed bean action on page load