鍍金池/ 教程/ HTML/ JSF生命周期
JSF數(shù)據(jù)表(h:dataTable)添加刪除
JSF <h:commandLink>標簽
JSF應用程序入門示例
JSF數(shù)據(jù)表(ui:repeat)創(chuàng)建表
JSF列表框
JSF數(shù)據(jù)表(h:dataTable)DataModel排序數(shù)據(jù)
JSF復合組件
JSF <h:inputText>標簽
JSF表單組合框
JSF <h:messages>標簽
JSF <h:message>標簽
JSF轉換日期時間
JSF JDBC連接
JSF <h:inputHidden>標簽
JSF多選列表框
JSF <h:inputSecret>標簽
JSF自定義轉換器
JSF <f:ajax>標簽
JSF生命周期
JSF可重定位資源
JSFJSF用戶界面組件模型
JSF <h:attribute>標簽
JSF驗證器標簽
JSF驗證字符串長度
JSF轉換器標簽
JSF托管bean(Managed Bean)
JSF值變化的事件
JSF UI組件示例
JSF MySQL CURD實例
JSF數(shù)據(jù)表(h:dataTable)排序數(shù)據(jù)
JSF <h:graphicImage>標簽
JSF <f:convertNumber>標簽
JSF教程
JSF托管Bean
JSF輸出腳本
JSF <h:outputText>標簽
JSF操作事件
JSF驗證正則表達式
JSF數(shù)據(jù)表(h:dataTable)行號
JSF <h:setPropertyActionListener>標簽
JSF注入托管bean實例
JSF <h:commandButton>標簽
JSF Web資源
JSF <h:inputFile>標簽
JSF驗證浮點數(shù)值范圍
JSF Facelets視圖
JSF是什么?
JSF Facelets模板
JSF的特性(特點)
JSF自定義驗證器類
JSF單選按鈕
JSF輸出樣式
JSF數(shù)據(jù)表(h:dataTable)更新數(shù)據(jù)
JSF HTML5友好標記
JSF表單復選框(CheckBox)示例
JSF <h:form>標簽
JSF Facelets技術介紹
JSF輸出格式化
JSF <h:inputtextarea>標簽
JSF驗證整數(shù)范圍
JSF <h:panelGrid>標簽

JSF生命周期

JSF(JavaServer Faces)應用程序框架的簡單程序是自動管理生命周期階段,并允許您手動管理。JSF(JavaServer Faces)應用程序的生命周期從客戶端對頁面發(fā)出HTTP請求時開始,并在服務器響應頁面時結束。

JSF生命周期分為兩個主要階段:

  • 執(zhí)行階段
  • 渲染階段

1. 執(zhí)行階段

在執(zhí)行階段,當?shù)谝淮握埱髸r,構建或恢復應用程序視圖。 對于其他后續(xù)請求,執(zhí)行其他操作,如應用請求參數(shù)值,對組件值執(zhí)行轉換和驗證,受托管的bean將使用組件值進行更新,并調用應用程序邏輯。
執(zhí)行階段被進一步分成以下子階段。

  • 恢復視圖階段
  • 應用請求值階段
  • 流程驗證階段
  • 更新模型值階段
  • 調用應用階段
  • 渲染響應階段

恢復視圖階段

當客戶端請求一個JavaServer Faces頁面時,JavaServer Faces實現(xiàn)開始恢復視圖階段。 在此階段,JSF將視圖中的組件構建為請求頁面,線性事件處理程序和驗證器的視圖,并將視圖保存在FacesContext實例中。

如果對該頁面的請求是回發(fā),那么與該頁面相對應的視圖已經(jīng)存在于FacesContext實例中。 在此階段,JavaServer Faces實現(xiàn)通過使用保存在客戶端或服務器上的狀態(tài)信息來還原視圖。

應用請求值階段

在此階段,在回發(fā)請求期間恢復組件樹。 組件樹是表單元素的集合。樹中的每個組件通過使用其decode(processDecodes())方法從請求參數(shù)中提取其新值。 之后,該值將本地存儲在每個組件上。

  • 如果任何解碼方法或事件偵聽器在當前FacesContext實例上調用了renderResponse方法,則JavaServer Faces實現(xiàn)將跳過“渲染響應”階段。
  • 如果任何事件在此階段已排隊,則JavaServer Faces實現(xiàn)將事件廣播到有興趣的監(jiān)聽器。
  • 如果應用程序需要重定向到其他Web應用程序資源或生成不包含任何JavaServer Faces組件的響應,則可以調用FacesContext.responseComplete()方法。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,并應用部分處理方法。

流程驗證階段

在此階段,JavaServer Faces通過使用其validate()方法來處理在組件上注冊的所有驗證器。 它檢查指定驗證規(guī)則的組件屬性,并將這些規(guī)則與為組件存儲的本地值進行比較。 JavaServer Faces還完成了沒有將immediate屬性設置為true的輸入組件的轉換。

  • 如果任何驗證方法或事件偵聽器在當前FacesContext上調用了renderResponse方法,則JavaServer Faces實現(xiàn)將跳過“渲染響應”階段。
  • 如果應用程序需要重定向到不同的Web應用程序資源或生成不包含任何JavaServer Faces組件的響應,則可以調用FacesContext.responseComplete方法。
  • 如果事件在此階段已排隊,則JavaServer Faces實現(xiàn)將它們廣播給有興趣的監(jiān)聽器。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,并應用部分處理方法。

更新模型值階段

確保數(shù)據(jù)有效后,它遍歷組件樹,并將相應的服務器端對象屬性設置為組件的本地值。 JavaServer Faces實現(xiàn)只更新輸入組件的value屬性指向bean屬性。 如果本地數(shù)據(jù)無法轉換為bean屬性指定的類型,生命周期將直接前進到“渲染響應”階段,以便重新呈現(xiàn)頁面并顯示錯誤。

  • 如果任何updateModels方法或任何監(jiān)聽器在當前FacesContext實例上調用了renderResponse()方法,則JavaServer Faces實現(xiàn)將跳過“渲染響應”階段。
  • 如果應用程序需要重定向到其他Web應用程序資源或生成不包含任何JavaServer Faces組件的響應,則可以調用FacesContext.responseComplete()方法。
  • 如果任何事件在此階段已排隊,JavaServer Faces實現(xiàn)將它們廣播到有興趣的監(jiān)聽器。
  • 如果當前請求被識別為部分請求,則從FacesContext檢索部分上下文,并應用部分處理方法。

調用應用階段

在此階段,JSF處理應用程序級事件,例如提交表單或鏈接到另一個頁面。
現(xiàn)在,如果應用程序需要重定向到其他Web應用程序資源或生成不包含任何JSF組件的響應,則可以調用FacesContext.responseComplete()方法。

之后,JavaServer Faces實現(xiàn)將控制轉移到“渲染響應”階段。

渲染響應階段

這是JSF生命周期的最后階段。 在此階段,JSF將構建視圖并將權限委托給相應的資源來呈現(xiàn)頁面。

  • 如果這是初始請求,則頁面上表示的組件將被添加到組件樹中。
  • 如果這不是初始請求,組件已經(jīng)添加到樹中,不需要再添加。
  • 如果請求是回應,并且在應用請求值階段,過程驗證階段或更新模型值階段期間遇到錯誤,則在此階段將再次呈現(xiàn)原始頁面。

如果頁面包含h:messageh:messages標簽,頁面上會顯示任何排隊的錯誤消息。
在渲染視圖的內容之后,保存響應的狀態(tài),以便后續(xù)請求可以訪問它。 恢復視圖階段可以使用保存的狀態(tài)。

2. 渲染階段

在此階段,請求的視圖作為對客戶端瀏覽器的響應。 視圖渲染是以HTML或XHTML生成輸出的過程。 所以,用戶可以在瀏覽器看到它。

在渲染過程中采取以下步驟。

  • 當客戶端對index.xhtml網(wǎng)頁進行初始請求時,編譯應用程序。
  • 應用程序在編譯后執(zhí)行,并為應用程序構建一個新的組件樹,并放置在FacesContext中。
  • 使用由EL表達式表示的組件和與其關聯(lián)受托管bean屬性填充組件樹。
  • 基于組件樹。 建立了新的視圖。
  • 該視圖作為響應呈現(xiàn)給請求客戶端。
  • 組件樹被自動銷毀。
  • 在后續(xù)請求中,重新構建組件樹,并應用已保存的狀態(tài)。