f上的必需标志:viewParam不会阻止调用preRenderView

时间:2014-01-21 12:16:52

标签: jsf-2 viewparams

我的一些viewParams是必需的,并且在缺少FacesMessage时会显示它们。但是系统事件preRenderView使用空搜索参数,因此返回了默认数据结果。反正是否阻止在违反所需属性时执行preRenderView注册方法?

2 个答案:

答案 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" />