定制验证,我应该使用的FacesContext#方法addMessage()或抛出Validator

2019-09-16 19:50发布

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

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

方法,我做了验证检查和刚刚加入FacesMessage实例由上下文context.addMessage(new FacesMessage(xxx...);在无效状态的情况下这似乎在我的应用程序工作正常不过我。我不知道我是否还需要明确地throw new ValidatorException()用于JSF正确处理生命周期?还是将JSF足够聪明,看上下文中的错误信息管理生命周期?

Answer 1:

你确实应该扔ValidatorException 。 否则,JSF还是会继续处理请求,更新模型值及调用操作方法。 你不想拥有它。

不要手动添加FacesMessage 。 构建ValidatorException它和JSF然后将信息自动添加到正确的组件,然后JSF将正确跳过更新模型值调用操作阶段。

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


文章来源: Custom Validator, should I use FacesContext#addMessage() or throw ValidatorException?