Пользовательский валидатор, следует ли использовать FacesContext#addMessage() или генерировать исключение ValidatorException?

Мне было интересно, как правильно реализовать собственный валидатор в 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 будет достаточно умен, чтобы рассматривать сообщения об ошибках в контексте управления жизненным циклом?


person phewataal    schedule 27.04.2012    source источник


Ответы (1)


Вы действительно должны бросать ValidatorException. В противном случае JSF продолжит обработку запроса, обновит значения модели и вызовет метод действия. Вы не хотите иметь его.

Не добавляйте вручную файл FacesMessage. Создайте с его помощью ValidatorException, и JSF автоматически добавит сообщение в нужный компонент, после чего JSF корректно пропустит этапы Обновить значения модели и Вызвать действие.

if (!valid) {
    FacesMessage message = new FacesMessage(SEVERITY_ERROR, "Invalid", null);
    throw new ValidatorException(message);
}
person BalusC    schedule 27.04.2012
comment
Актуально ли это в наши дни? Я пишу валидатор, но у меня есть сомнения, бросать ValidatorException или нет. - person Douglas De Rizzo Meneghetti; 26.04.2016
comment
@ Дуглас: да, конечно. - person BalusC; 26.04.2016