3

我正在使用primefaces 3.0。我有三个文本字段,其中任何一个都是必需的。我如何在 primefaces 中验证这一点。请帮忙..谢谢

4

1 回答 1

6

通常,当f:validator在组件上使用自定义标记时,将在生命周期事件阶段调用此验证器,然后将值应用于服务器端。当挂起的值通过验证时,它将作为组件的值应用。如果验证失败,则该值将被丢弃,通常会添加一条验证消息。

此过程在这种情况下不起作用,因为确定给定输入字段的值是否有效取决于其他输入字段的待处理值,我们无法保证验证组件的顺序.

我通常通过在页面上声明 PreRender 事件生命周期事件来解决此问题:

<f:event listener="#{manageBean.preRenderValidation}" type="preRenderView" />

现在,在我的托管 bean 中,我可以在正常验证和应用请求值阶段和事件阶段完成后手动执行此类验证。

public void preRenderValidation() {
    // validation logic
    if (failed) {
      FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "You have a validation error", null);
      getCurrentFacesContextInstance().addMessage(null, msg);
    }
    // If action redirects to another page or state needs reverted back then this must be done
    // manually
}

随着 preRender 中发生验证错误,特定组件事件可能已经更改了某些状态或返回了导航操作,因此在验证失败的情况下需要手动恢复。当然,另一种方法是在每个方法的开头进行手动验证。

于 2012-05-14T12:19:24.040 回答