Любое действие прослушивателя вызывается во время фазы действия вызова, до действительный метод действия. Какие методы прослушивателя действия должны вызываться, определяются на основе атрибута actionListener
компонента UICommand
, который связан с отправкой.
Любое изменение значения слушателя вызывается во время фазы Validations (или применить запрос значений фазы, когда immediate="true"
для конкретного UIInput
компонента) после с успешной конверсии/валидации представленного значения и только, когда поданное значение отличается от Начальное значение. Какие методы прослушивателя изменения значения должны вызываться, определяются на основе атрибута valueChangeListener
компонентов UIInput
, которые связаны с отправкой.
И нет, у них нет собственного жизненного цикла. Когда они заканчивают выполнение и возвращение, он все еще находится в одной и той же фазе жизненного цикла. После вызова valueChangeListener
JSF продолжит преобразование/проверку следующего компонента UIInput
, или если его нет, перейдите к следующей фазе. После вызова actionListener
JSF продолжит следующий actionListener
, или если его нет, вызовите метод реального действия.
Update: после того, как снова читать ваши комментарии, я думаю, что я сейчас вижу ваши сомнения в частности слушателя изменения значения. Кажется, вы думаете, что он по умолчанию немедленно вызывает новый запрос на стороне сервера во время события изменения клиентской стороны. Он делает это не по умолчанию. Вы можете достичь этого, добавив маленький кусок кода JavaScript, который представляет всю HTML-форму во время события изменения поля ввода HTML.
onchange="this.form.submit()"
Эта часть не имеет ничего общего с JSF. Это простой атрибут HTML. Откройте страницу в webbrowser, щелкните правой кнопкой мыши и выберите View Source. Вы увидите, что он есть. Отключите JavaScript в своем браузере или удалите его в коде JSF, и вы увидите, что он больше не будет работать. Вам нужно нажать кнопку отправки самостоятельно, чтобы получить все, чтобы запустить.
OK. Например, когда мы меняем значение в Combo Box. Он вызовет ValueChangeListener. Вы хотите сказать, что это вызовет полный новый запрос на сервер, и страница будет перезагружена. Он начнется с этапа Resore View. Я прав? – Krishna
Нет, не будет. По крайней мере, не по умолчанию. Только если вы вызываете 'ExternalContext # redirect()' или 'FacesContext # responseComplete()' внутри метода прослушивания значений, то это позволит JSF выпрыгнуть из жизненного цикла. Первый отключит и удалит весь запрос и позволит браузеру запустить новый GET-запрос по данному URL-адресу. Второй по умолчанию приведет к пустой странице.Это часто используется (в методах действий), когда вы уже что-то писали (например, двоичный файл) для ответа, и хотите, чтобы JSF не отображал представление (и, следовательно, искажал двоичный файл). – BalusC
Hi BalusC, я думаю, вы не поняли мой вопрос. Здесь я хочу сказать, что при изменении значений Will It запустит новые фазы жизненного цикла, начиная с View Restore и т. Д. В предыдущем комментарии вы сказали, что слушатель изменения стоимости должен вызываться на фазе Apply Request Values. Для этого он начал жизненный цикл. Я прав. Этот вопрос может выглядеть просто, я хочу, чтобы основы были правильными. – Krishna