Да, жизненный цикл 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-объекта начального запроса будут очищены и воссозданы.