はい、JSF ライフサイクルはリクエスト バウンドです。はい、結果はデフォルトで同じリクエストでレンダリングされます。
あなたを混乱させるキーは、HTTP サーブレット要求に関して「転送」対「リダイレクト」である可能性があります。
デフォルトでは、JSF はリクエストをターゲット ページに転送します。サーブレット API をよく知っている場合は、それが内部で次のことを行っていることを理解できます。
request.getRequestDispatcher("welcome.xhtml").forward(request, response);
このようにして、ターゲット ページは同じ要求オブジェクトにアクセスできます。ターゲット ページが、フォームが送信された (login.xhtml
実際の) ページと異なる場合、ブラウザーのアドレス バーに変更が反映されません。
<redirect/>
ただし、ナビゲーション ケースに を追加するかExternalContext#redirect()
、Bean のアクション メソッドを呼び出すかfaces-redirect=true
、ボタンのアクションにパラメータを追加することで JSF 2.0 の適切な方法で、リクエストをターゲット ページにリダイレクトするように JSF を構成できます。
<h:commandButton value="login" action="welcome?faces-redirect=true" />
いずれにせよ、サーブレット API 用語では次のことを行います。
response.sendRedirect("welcome.xhtml");
これは基本的に、指定された場所に対して真新しい GET リクエストを発行するようにクライアントに指示します。このようにして、最初のリクエストのリクエストスコープおよびビュースコープの Bean は破棄され、再作成されることに注意してください。