在primefaces中进行自定义验证

时间:2012-05-14 11:15:52

标签: primefaces

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

1 个答案:

答案 0 :(得分: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中发生验证错误,因此特定组件事件可能已经更改了某些状态或返回的导航操作,因此在验证失败的情况下需要手动还原这些操作。当然,另一种方法是在每个方法的开头进行实际验证。