Повторяется ли жизненный цикл JSF на итоговом Facelet при навигации? - PullRequest
4 голосов
/ 27 июля 2010

У меня есть простой фасет login.xhtml, который содержит имя пользователя и пароль, а также командную кнопку.У командной кнопки просто есть результат action="welcome", который отображает лицевую сторону welcome.xhtml.

Я очень плохо знаком с JSF.Когда я читаю жизненный цикл JSF, когда я нажимаю кнопку, тогда жизненный цикл вызова приложения обрабатывает навигацию и отображает (??) welcome.xhtml.Я все еще путаюсь, если welcome.xhtml начнет новый жизненный цикл Facelet или нет.

PS: я заметил, что URL-адрес не меняется на welcome.xhtml.Связан ли жизненный цикл jsf с запросом?

1 Ответ

3 голосов
/ 27 июля 2010

Да, жизненный цикл JSF привязан к запросу.И да, результат по умолчанию будет отображаться в том же запросе.

Ключ, который вас смущает, скорее всего " forward " против " redirect"с точки зрения запросов сервлетов HTTP.

JSF по умолчанию перенаправляет запрос на целевую страницу.Если вы хорошо знаете API сервлетов, вы поймете, что тогда он выполняет следующие функции:

request.getRequestDispatcher("welcome.xhtml").forward(request, response);

Таким образом, целевая страница имеет доступ к тому же объекту запроса,Если целевая страница отличается от страницы, на которую была отправлена ​​форма (на самом деле login.xhtml), вы не увидите изменения, отображаемые в адресной строке браузера.

Однако вы можете настроитьJSF, чтобы перенаправить запрос на целевую страницу, добавив <redirect/> к случаю навигации, или вызвав ExternalContext#redirect() в методе действия bean-компонента, или приятным способом JSF 2.0, добавив параметр faces-redirect=true к действию кнопки:

<h:commandButton value="login" action="welcome?faces-redirect=true" />

В любом случае, это в терминах Servlet API делает следующее:

response.sendRedirect("welcome.xhtml");

, который в основном инструктирует клиента отправлять новый GET-запрос в указанное местоположение.Обратите внимание, что таким образом любые запросы и просмотр bean-объектов bean-объекта начального запроса будут очищены и воссозданы.

...