Попытка понять немедленный = «истинный» пропуск ввода, когда это не должно
Как раз тогда, когда я думал, что сразу понял ... * вздох *
Рассмотрим следующую страницу JSF:
<br>
И этот боб:
public class TestBean {
private String didSomething = "Nothing done yet";
// + getter
public void doFoo() {
didSomething = "Did foo!";
}
public void doBar() {
didSomething = "Did bar!";
}
Из всего, что я прочитал о немедленном, я бы ожидал следующего:
При попытке выполнить foo без указания значения для поля ввода действие никогда не выполняется, поскольку во времяprocessValidationsPhase
возникает ошибка, в результате чего страница сразу же после этого этапа перерисовывается с сообщением об ошибке. ЗначениеdidSomething
остается неизменной. (Это работает как положено)
При попытке сделать бар, не предоставляя значение для поля ввода, действие выполняется во времяapplyRequestValuesPhase
из-за непосредственного атрибута. ПеременнаяdidSomething
изменено (Это работает как положено)
Что будет дальше,это описание состояния:"
Нулевое возвращаемое значение (как результат метода действия) приводит к тому, что обработка продолжается как обычно, т. Е. Не непосредственные компоненты проверяются, затем выполняется обновление-модель (если не было ошибок проверки). Для метода прослушивателя действий, который возвращает void, необходимо вызвать FaceContext.renderResponse (); если нормальный поток не желателен. "
Исходя из этого, у меня возникла идея, что обработка продолжается как обычно (поскольку мой метод действия не возвращает ни результат, ни силуrenderResponse()
), что приводит к той же ошибке проверки. Разница лишь в том, что это происходитпосле установка.didSomething
Однако этого не происходит. Вместо этого создается впечатление, что сайт по-прежнему пропускает все оставшиеся фазы, при этом поле ввода не затрагивается. Перерисовывается без сообщения об ошибке.
Может кто-нибудь объяснить мне, где мое понимание того, как это работает, неправильно?