1

我的一些 viewParams 是强制性的,当它们丢失时会显示 FacesMessage。但是系统事件 preRenderView 是在搜索参数为空的情况下执行的,因此返回了默认的数据结果。有没有办法阻止 preRenderView 注册的方法在违反所需属性时被执行?

4

2 回答 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 回答