JSF生命週期(life cycle)

和JSF生命週期相關的請求與響應有兩類:分別是Faces response和Non-Faces response,以及Faces request和Non-Faces。jsp


另外有三種場景與此相關分別是:spa

  1. Scenario 1: Non-Faces Request Generates Faces Response
  2. Scenario 2: Faces Request Generates Non-Faces Response
  3. Scenario 3: Faces Request Generates Faces Response

以上描述的是JSF頁面和非JSF頁面之間轉換的問題,能夠說是JSF生命週期中的一種特殊的狀況。code


標準請求處理的生命週期:orm


Restore View(視圖重建)階段:blog

 

當咱們請求一個JSF頁面的時候,這個階段會出現。JSF會構建這個頁面的視圖,鏈接組建的事件處理器和驗證器,生命週期

並將頁面的視圖存到Faces Context的實例中。FacesContext的實例中包含了一切用來處理獨立請求的信息。全部應用的組建標籤,事件處理器,轉換器和驗證器都會訪問它。隊列

 

若是對頁面的請求是初次請求,那麼系統會給一個空的視圖,並將生命週期推動到響應渲染階段。進程

 

應用請求階段(Apply Request Values Phase事件

組件樹被重建以後,樹上的每個組件都會使用它們的decode方法來從請求參數中提取它們的新的值。這些值將會被這些組件本身保存起來。若是在提取值的時候發生了轉換失敗的錯誤,那麼和這個組件相關的一個錯誤信息會生成,並進入FacesContext(稱爲上下文)的隊列之中。這個錯誤信息將會在響應渲染階段(render response phase)和進程驗證階段產生的全部錯誤的結果一塊兒被顯示出來。ci

 

若是解碼方法和事件監聽器調用了上下文中的renderResponse方法,系統將會進入響應渲染階段。

 

若是事件在這個階段中已經被轉入隊列中,那麼系統會事件傳遞給對其感興趣的監聽。

 

若是某些頁面上的組件的當即屬性(immediate attributes)被置爲真的話,那麼,與這個組件相關的驗證,轉換和關聯事件操做都會在這個階段完成。

 

這時,若是程序須要跳轉到一個不一樣的應用中或者產生一個不包含任何JSF組件的響應的時候,能夠調用FacesContext.responseComplete

 

驗證處理階段(Process Validations Phase

在這個階段,系統會執行組件樹上的組件註冊的所有的驗證器。系統會根據組件的屬性的驗證規則與本地值是否一致。

 

若是本地值非法,系統會在上下文中增長一個錯誤信息。而且將週期跳轉到響應渲染階段。頁面會再次渲染以便於顯示錯誤信息。若是有轉換的錯誤也會發生一樣的事情。

 

也可能發生像上一個階段同樣的跳轉和事件傳遞的狀況。

 

更新模型值(Update Model Values Phase

更新與組件綁定的模型的值。有可能出現轉換錯誤,處理過程同上。其餘狀況同上。

 

應用執行階段(Invoke Application Phase

系統在這一階段中會執行所有的應用級事件。跳轉同上。

 

請求渲染階段(Render Response Phase

若是你使用jsp那麼系統會代替jsp容器進行渲染工做。若是是初次請求,系統會將組件加入到組件樹上。若是不是則不會。在以上兩種狀況下,組件都會隨着JSP容器解析頁面標籤的時候一併渲染本身。

相關文章
相關標籤/搜索