Я написал простое JSF-приложение с двумя валидаторами, чтобы понять фазу проверки процесса JSF. Here're валидаторы:Фаза проверки процесса жизненного цикла JSF
@FacesValidator("second")
public class AnotherValidator implements Validator{
public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
throws ValidatorException {
System.out.println("Validation phase, the second");
FacesContext.getCurrentInstance().renderResponse();
throw new ValidatorException(new FacesMessage("The second"));
}
}
и
@FacesValidator("first")
public class ProducerValidator implements Validator{
public void validate(FacesContext arg0, UIComponent arg1, Object arg2)
throws ValidatorException {
System.out.println("Validation phase, the first");
FacesContext.getCurrentInstance().renderResponse();
throw new ValidatorException(new FacesMessage("The first"));
}
}
Я подумал, что если мы называем renderResponse
метод от метода validate
, то JSF-реализация должна перейти к фазе ответа рендера. Но на самом деле у меня есть следующий вывод на консоль:
Validation phase, the first
Validation phase, the second
Несмотря вызова renderResponse
от первого валидатора, второй валидатор в настоящее время вызывается в любом случае ... Почему? Разметка лицевых элементов:
<h:inputText value="#{helloBean.p}" converter="conv">
<f:validator validatorId="first"/>
<f:validator validatorId="second" />
</h:inputText>
Исправлено несколько опечаток. –
@Tiny Мне кажется, что более ясно отправлять сообщения о проверке для определенного компонента через 'facesContext.addMessage (String, FacesMessage)' и использовать ' ' ... –
@Tiny BTW, я пытаюсь избежать использования ' ' без указания идентификатора компонента или 'globalOnly', is'n that true? –