我知道可以使用以下标准方式(对于jsf 2.1)
来完成自定义操作<f:metadata>
<f:viewParam name="query" value="#{bean.query}" />
<f:event type="preRenderView" listener="#(bean.action}" />
</f:metadata>
鉴于我的请求总是GET类型,并且url为,/ context / page1.xhmtl?query = jsf
我可以在setter方法setQuery()而不是监听器方法setAction()中调用我的自定义操作吗?意味着我将在应用模型值阶段而不是预渲染响应阶段中调用我的动作代码(例如设置相应的视图bean)。
请分享这种方法是否有任何缺点,因为这是唯一的方法,它在我的应用程序设置中运行良好,并且无法正常使用预渲染侦听器方法。
更新:我的应用无法正常使用prerender侦听器方法的原因,可能在渲染响应的“开始”之后调用prerender方法,不是在它之前。我希望在渲染响应开始之前调用我的prerender监听器方法,理想情况是在“调用应用程序”阶段结束时或之后。期待那种方式有意义吗?因为我认为在渲染响应阶段开始后调用为时已晚。
非常感谢。
答案 0 :(得分:0)
根据评论,在视图中调用Action但作为Invoke Application阶段的一部分可以在omnifaces'InvokeActionEventListener的帮助下完成:
<f:metadata>
<f:event type="postInvokeAction" listener="#{bean.action}" />
</f:metadata>
使用JSF-2.2进行部署时,您还可以使用:
<f:metadata>
<f:viewAction action="#{bean.action}" />
</f:metadata>