2012-05-14 29 views
3

我正在使用primefaces 3.0。 我有三个文本字段,其中任何一个是必需的。 我怎样才能验证这在primefaces。 请帮助.. 感谢在primefaces中自定义验证

回答

6

通常,当一个组件,然后这个验证将在生命周期的事件阶段被调用上使用自定义f:validator标签在服务器端应用值之前。待处理值通过验证后,将作为组件的值应用。如果验证失败,则该值将被丢弃,并且通常会添加验证消息。

该过程在这种情况下不起作用,因为确定给定输入字段的值是否有效取决于其他输入字段的待定值,并且我们不保证其中的顺序组件将被验证。

我通常通过声明页面上的PreRender事件生命周期事件解决这个问题:在我管理的bean

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

现在我可以正常验证后manaully执行这样的验证和应用请求值阶段和事件相已经完成。

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 
} 

随着预渲染发生然后特定的组件事件可能已经验证错误改变某些状态或返回导航动作所以这些都需要在验证失败的情况下被手动地还原。当然,另一种做法是在每种方法的开始处进行验证。