自定义验证器,我应该使用FacesContext#addMessage()还是抛出ValidatorException?

时间:2012-04-27 16:07:41

标签: jsf validation jsf-1.2 custom-validators facescontext

我想知道在JSF 1.2中实现自定义Validator的正确方法是什么。在我的Validator类'

public void validate(FacesContext context, UIComponent component,Object value) throws   ValidatorException {}

方法,我正在进行验证检查,只是在FacesMessage条件无效的情况下将context.addMessage(new FacesMessage(xxx...);实例添加到上下文中。这似乎在我的应用程序中正常工作。但是,我不确定我是否还需要明确地throw new ValidatorException()让JSF正确处理生命周期?或者JSF是否足够聪明,可以查看上下文中的错误消息来管理生命周期?

1 个答案:

答案 0 :(得分:2)

你应该扔ValidatorException。否则,JSF仍将继续处理请求并更新模型值并调用操作方法。你不想拥有它。

请勿手动添加FacesMessage。使用它构造ValidatorException,然后JSF会自动将消息添加到正确的组件中,然后JSF将正确跳过更新模型值调用操作阶段。

if (!valid) {
    FacesMessage message = new FacesMessage(SEVERITY_ERROR, "Invalid", null);
    throw new ValidatorException(message);
}