淺談 JSF 生命週期

J2EE oracle 官方文檔 

http://docs.oracle.com/javaee/6/tutorial/doc/docinfo.html   html

查看其中 Part II Web tier --> javaserver faces technology --> advance concepts (高級概念) java

前言:充分理解JSF生命週期對於JSF開發意義重大 服務器

發現網上有了官方的對應翻譯 直接拿了用了(生命週期圖換成了官方的) 架構

簡介

JSF是一個Web應用,也會遵循請求/相應的架構,與JSP的生命週期徹底類似:客戶端發送一個HTTP請求,服務器端對請求進行處理以後,向客戶端送回HTTP響應,整個JSP生命週期完成。JSF將請求/響應的生命週期細化爲更多階段,從而支持更加複雜的UI組件模型。 oracle

一、JSF將用戶請求分紅兩種:

一、 初始請求:當用戶直接向某個頁面發送請求時,請求沒有附加任何的參數信息。
二、 提交表單:單擊表單的提交按鈕、提交超連接時,就會發生提交表單請求。

二、JSF的6個生命週期:

   

2.一、恢復視圖階段:

當客戶端向某個JSF頁面發送請求時,例如單擊了某個超連接或者按鈕時,JSF就開始恢復視圖階段。
   在這個階段,JSF將會爲該頁面建立對應的視圖,並將事件監聽器、輸入校驗器等鏈接到頁面所包含的UI組件上,使用FacesContext實例來保存視圖對象。此時,應用相關的全部組件,包括UI,事件處理器,轉換器和輸入校驗器均可以訪問到該FacesContext實例。 spa

若是是初始請求:JSF將在該階段建立一個新的視圖對象,並將生命週期階段直接推動到生產響應階段。
   若是是提交表單:則對應該頁面的視圖已經存在,JSF將會採用客戶端或服務器端的信息來恢復視圖。 翻譯

2.二、應用請求值階段:

當視圖恢復完成後,每一個組件都會調用它的decode方法從請求參數中提取新的參數值,並保存在本地組件上(保存以前須要先進行類型轉換,若是值轉換失敗,JSF將會使用FacesContext來保存與組件相關的錯誤消息,並將消息放入消息對了中,這些消息將會等到輸出響應階段幾種處理)。 code

若是任何組件的decode方法或者事件監聽器調用了FacesContext的renderResponse方法,那麼JSF將會直接推動到生成響應階段。 server

若是頁面的某個組件設置了immediate="true",這個階段還會處理這些組件相關的驗證、轉換和事件等。 htm

在這個階段,應用能夠重定向到其餘資源,或者生成一個不包含Java Server Faces組件的響應,若是須要實現這種處理,開發者必須調用Facescontext。responseComplete來跳過生成響應階段。

這個階段結束後,全部組件都被設置成了他們的新值,全部消息和事件都被放入隊列。

2.三、處理輸入校驗階段:

處理UI組件註冊的輸入校驗器,JSF會用各UI組件上的本地值和對應輸入校驗規則進行比較,若是本地值無效,JSF就會把對應的錯誤消息添加到FacesContext實例中,而JSF的生命週期也將直接推動到生成響應階段,顯示頁面能夠經過<h:message>或者<h:messages>來顯示輸入校驗的錯誤信息。

在這個階段中,任何validator方法和事件監聽器調用了當前的FacesContext實例的renderResponse方法,那麼應用的生命週期將會直接推動到生成響應階段。

若是須要在該階段重定向到其餘資源,或者生成一個不包含Java Server Faces組件的響應,開發者能夠調用FacesContext.responseComplete來跳轉到生成響應階段。

2.四、更新模型的值階段:

經過了輸入校驗以後,使用UI組件的本地值更新與之綁定的託管Bean(將用戶輸入的數據傳送給服務器端的託管Bean),JSF只會更新綁定到輸入組件的託管Bean。

若是沒法更新,則會生成錯誤信息,生命週期直接推動到生成響應階段,能夠採用<h:message>或<h:messages>來顯示錯誤信息。

在這個階段中,若是任何updateModels方法或事件監聽器調用了當前FacesContext實例的renderResponse方法,生命週期將會直接推動到生成響應階段。

若是須要在該階段重定向到其餘資源,或者生成一個不包含Java Server Faces組件的響應,開發者能夠調用FacesContext.responseComplete來跳轉到生成響應階段。

2.五、調用應用階段:

在這個階段中,JSF將會處理應用級別的事件,例如提交表單或連接到其餘頁面。

若是須要在該階段重定向到其餘資源,或者生成一個不包含Java Server Faces組件的響應,開發者能夠調用FacesContext.responseComplete來跳轉到生成響應階段。

2.六、生成響應階段:

在這個階段中,應用準備想客戶度輸出響應,若是使用了JSP頁面,JSF將調用JSP容器來處理響應。若是是初始請求,頁面上的組件將被JSP容器添加到組件樹中;若是不是初始請求,那麼全部組件都已被添加到組件樹中,所以不須要再次添加。

若是在提交表單階段,而且在應用請求值階段、處理階段或更新模型階段遇到了錯誤,應用將會選擇生成最初的頁面。

生成響應後,應用的響應狀態也被保存下來。

JSF提供了PhaseId類來表明生命週期階段,本質上是一個枚舉類,經常使用的常量:

ANY_PHASE:任意一個生命週期階段
RESTORE_VIEW:恢復視圖階段
APPLY_REQUEST_VALUES:應用請求值階段
PROCESS_VALIDATIONS:處理輸入校驗階段
UPDATE_MODEL_VALUES:更新模型的值階段
INVOKE_APPLICATION:調用應用階段
RENDER_RESPONSE:生成響應階段

附上官方文檔連接地址

     http://docs.oracle.com/javaee/6/tutorial/doc/bnaqq.html#glprc

相關文章
相關標籤/搜索