我的一些viewParams是必需的,并且在缺少FacesMessage时会显示它们。但是系统事件preRenderView使用空搜索参数,因此返回了默认数据结果。反正是否阻止在违反所需属性时执行preRenderView注册方法?
答案 0 :(得分:3)
<f:event type="preRenderView">
在这个构造中本质上是一个黑客/解决方法。正如它的名字所说,无论类型请求(回发与否)和验证结果(失败与否),渲染响应阶段之前确实始终。在此相关问题中也详细阐述了这一点:What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?这包含以下代码段,可以帮助您进一步:
public void init() {
FacesContext facesContext = FacesContext.getCurrentInstance();
if (!facesContext.isPostback() && !facesContext.isValidationFailed()) {
// ...
}
}
将所需的逻辑放在// ...
。
在JSF 2.2中,标准解决方案的风格为<f:viewAction>
,也在前面提到的相关问题中得到了证明。
答案 1 :(得分:1)
我没有查看代码,但是从docs preRenderView
开始之前,构建了。所以应用程序甚至不知道有一个要验证的视图参数。
您可能需要在事件方法或中检查所需的参数,使用JSF-2.2的新f:viewAction,这似乎是您真正想要的。
如果您可以添加/已经在使用Omnifaces,那么InvokeActionEventListener会在<f:viewParam>
被分配后运行:
<f:event listener="#{bean.myListener()}" type="postInvokeAction" />