Попытка понять немедленный = «истинный» пропуск ввода, когда это не должно

Как раз тогда, когда я думал, что сразу понял ... * вздох *

Рассмотрим следующую страницу JSF:

<h:inputText value="#{testBean.text}" required="true" />
<h:commandButton actionListener="#{testBean.doFoo}" value="Do Foo" />
<h:commandButton immediate="true" actionListener="#{testBean.doBar}" value="Do Bar" /><br />
<h:outputText value="#{testBean.didSomething}" />

И этот боб:

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 изменено (Это работает как положено)

Что будет дальше,это описание состояния:

«Нулевое возвращаемое значение (как результат метода действия) приводит к тому, что обработка продолжается как обычно, т. Е. Не непосредственные компоненты проверяются, затем выполняется update-модель (если не было ошибок проверки). Для метода слушателя действия, который возвращает void, необходимо вызвать FaceContext.renderResponse (), если нормальный поток не требуется. "

Исходя из этого, у меня возникла идея, что обработка продолжается как обычно (поскольку мой метод действия не возвращает ни результат, ни силуrenderResponse()), что приводит к той же ошибке проверки. Разница лишь в том, что это происходитпосле установкаdidSomething. Однако этого не происходит. Вместо этого создается впечатление, что сайт по-прежнему пропускает все оставшиеся фазы, при этом поле ввода не затрагивается. Перерисовывается без сообщения об ошибке.

Может кто-нибудь объяснить мне, где мое понимание того, как это работает, неправильно?

Ответы на вопрос(1)

Ваш ответ на вопрос