是的,JSF生命週期是請求限制的。是的,結果將默認呈現在相同的請求中。
這是混淆了你的關鍵是有可能「向前」與在HTTP Servlet請求的術語「重定向」。
JSF默認將請求轉發到目標頁面。如果你知道Servlet API的話,你會明白它是那麼抽油煙機執行以下操作下:
request.getRequestDispatcher("welcome.xhtml").forward(request, response);
這樣的目標頁面可以訪問相同請求對象。如果目標頁面與提交表單的頁面不同(實際上爲login.xhtml
),則不會在瀏覽器地址欄中看到更改。
但是,您可以配置JSF通過添加<redirect/>
導航的情況下將請求重定向到目標頁面,或者在bean的操作方法調用ExternalContext#redirect()
,或在一個不錯的JSF 2.0的方式加入faces-redirect=true
參數按鈕的操作:
<h:commandButton value="login" action="welcome?faces-redirect=true" />
無論哪種方式,它是在做Servlet API的條款如下:
response.sendRedirect("welcome.xhtml");
基本上指示客戶端觸發一個全新的GET請求TH e給定位置。請注意,這樣,初始請求的任何請求和視圖範圍的bean都將被丟棄並重新創建。
但是,如果welcome.xhtml從未顯示過,並且jsf需要爲歡迎facelet執行還原視圖生命週期?如果是這樣,是否需要啓動差異生命週期? – robinmag 2010-07-27 16:54:47
無論是否存在視圖,都會調用恢復視圖階段。如果沒有,那麼JSF將在這個階段創建一個新的。儘管針對JSF 1.2,但下面的文章也適用於JSF 2.0,您可能會發現它很有用:[Debug JSF生命週期](http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html) 。 – BalusC 2010-07-27 16:56:30
謝謝! ... – robinmag 2010-07-27 17:07:54