Ответ 1
Любой исполнитель действия вызывается во время действия фазы действия перед методом реального действия. Какие методы прослушивателя действия должны быть вызваны, определяются на основе атрибута actionListener
компонента UICommand
, связанного с отправкой.
Любой слушатель изменения значения вызывается во время фазы валидации (или применяет фазу запроса значения, когда immediate="true"
для конкретного компонента UIInput
) после успешного преобразования/проверки представленного значения и только тогда, когда представленное значение отличается от начального стоимость. Какие вызовы при вызове изменения значения определяются на основе атрибута valueChangeListener
компонентов UIInput
, которые связаны с отправкой.
И нет, у них нет собственного жизненного цикла. Когда они заканчивают выполнение и возвращение, он все еще находится в одной и той же фазе жизненного цикла. После вызова valueChangeListener
JSF продолжит преобразование/проверку следующего компонента UIInput
, или если его нет, перейдите к следующей фазе. После вызова actionListener
JSF продолжит следующий actionListener
или если их нет, вызовите метод реальных действий.
Обновить: после повторного чтения ваших комментариев, я думаю, что теперь я вижу ваши сомнения в особенности слушателя изменения стоимости. Кажется, вы думаете, что он по умолчанию немедленно вызывает новый запрос на стороне сервера во время события изменения клиентской стороны. Он делает это не по умолчанию. Вы можете достичь этого, добавив немного фрагмента кода JavaScript, который представляет всю HTML-форму во время события изменения поля ввода HTML.
onchange="this.form.submit()"
Эта часть не имеет ничего общего с JSF. Это простой атрибут HTML. Откройте страницу в webbrowser, щелкните правой кнопкой мыши и выберите "Просмотр источника". Вы увидите это там. Отключите JavaScript в своем браузере или удалите его в коде JSF, и вы увидите, что он больше не будет работать. Вам нужно будет нажать кнопку submit самостоятельно, чтобы запустить все.