PrimeFaces中的自定义验证

3
我正在使用PrimeFaces 3.0。 我有三个文本字段,其中任何一个都是必填的。 如何在PrimeFaces中验证这一点。 请帮忙。 谢谢。
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中,那么特定的组件事件可能已经更改了某些状态或返回了导航操作,因此在验证失败的情况下需要手动恢复这些操作。当然,另一种方法是在每个方法开始时手动进行验证。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接