我的一些 viewParams 是强制性的,当它们丢失时会显示 FacesMessage。但是系统事件 preRenderView 是在搜索参数为空的情况下执行的,因此返回了默认的数据结果。有没有办法阻止 preRenderView 注册的方法在违反所需属性时被执行?
问问题
449 次
2 回答
3
在这个<f:event type="preRenderView">
构造中本质上是一种破解/解决方法。顾名思义,它确实总是在渲染响应阶段之前调用,而不管类型请求(回发与否)和验证结果(失败与否)。在这个相关问题中也详细阐述了这一点:<f:metadata>、<f:viewParam> 和 <f:viewAction> 可以用于什么?这包含以下代码段,可以进一步帮助您:
public void init() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
将所需的逻辑放在那里代替// ...
.
在 JSF 2.2 中,提供了一个标准的解决方案<f:viewAction>
,在上述相关问题中也有演示。
于 2014-01-21T14:56:04.823 回答
1
我没有看过代码,但是从文档中preRenderView
开始,在视图中的任何内容被构造之前。所以应用程序甚至不知道有一个要验证的视图参数。
您可能需要在事件方法中检查所需的参数或使用 JSF-2.2 的新f:viewAction,这似乎是您真正想要的。
如果您可以添加/已经在使用 Omnifaces,则有InvokeActionEventListener,它在<f:viewParam>
s 分配后运行:
<f:event listener="#{bean.myListener()}" type="postInvokeAction" />
于 2014-01-21T13:36:18.630 回答