我并非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阶段可能不存在,因此它没有意义,但我对这个级别的生命周期不熟悉,不知道是否这样做了#39。是这样的,或者这只是一次失败。
解决方法是输入一个伪造的参数。
有人知道这是错误还是预期?
答案 0 :(得分:1)
它确实按设计工作。
在INVOKE_APPLICATION
阶段触发这些事件。如果在RESTORE_VIEW
阶段没有发现视图参数,那么JSF将立即进入RENDER_RESPONSE
阶段。中间的所有阶段都将被跳过:APPLY_REQUEST_VALUES
,PROCESS_VALIDATIONS
,UPDATE_MODEL_VALUES
和INVOKE_APPLICATION
。
解决方法确实是宣布“虚拟”<f:viewParam>
,或更好,使用<f:viewAction>
提供的<f:viewAction action="#{myController.initializeForm}" />
而不是InvokeActionEventListener
documentation中提到的。
<f:viewParam>
请注意,<f:viewParam name="test" />
不一定需要bean属性。
#{test}
它将隐式放在请求范围内,并以set desktopFolder to path to desktop
tell application "Finder"
set a to folder "Files:" of desktopFolder
set b to folder "Copies:" of desktopFolder
duplicate every file of a to b
end tell
提供。