2011-01-25 4 views
3

HI,ActionListener фазы в JSF

У меня есть сомнения в вызове метода ActionListener в бобах JSF. Например, каждый запрос или представление формы JSF проходит через жизненный цикл шести фаз. Но когда мы запускаем конкретное событие, например, прослушиватель действий или прослушиватель изменений значений, существует ли какой-либо жизненный цикл, связанный с этим запросом?

Просьба уточнить меня.

ответ

10

Любое действие прослушивателя вызывается во время фазы действия вызова, до действительный метод действия. Какие методы прослушивателя действия должны вызываться, определяются на основе атрибута 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, и вы увидите, что он больше не будет работать. Вам нужно нажать кнопку отправки самостоятельно, чтобы получить все, чтобы запустить.

+0

OK. Например, когда мы меняем значение в Combo Box. Он вызовет ValueChangeListener. Вы хотите сказать, что это вызовет полный новый запрос на сервер, и страница будет перезагружена. Он начнется с этапа Resore View. Я прав? – Krishna

+1

Нет, не будет. По крайней мере, не по умолчанию. Только если вы вызываете 'ExternalContext # redirect()' или 'FacesContext # responseComplete()' внутри метода прослушивания значений, то это позволит JSF выпрыгнуть из жизненного цикла. Первый отключит и удалит весь запрос и позволит браузеру запустить новый GET-запрос по данному URL-адресу. Второй по умолчанию приведет к пустой странице.Это часто используется (в методах действий), когда вы уже что-то писали (например, двоичный файл) для ответа, и хотите, чтобы JSF не отображал представление (и, следовательно, искажал двоичный файл). – BalusC

+0

Hi BalusC, я думаю, вы не поняли мой вопрос. Здесь я хочу сказать, что при изменении значений Will It запустит новые фазы жизненного цикла, начиная с View Restore и т. Д. В предыдущем комментарии вы сказали, что слушатель изменения стоимости должен вызываться на фазе Apply Request Values. Для этого он начал жизненный цикл. Я прав. Этот вопрос может выглядеть просто, я хочу, чтобы основы были правильными. – Krishna

Смежные вопросы