1. 程式人生 > >JSF Web框架與Facelets表現層技術

JSF Web框架與Facelets表現層技術

mage 新建 技術支持 監聽 表現 響應 能力 IE 普通

JSF(JavaServer Faces)

JSF應用程序的生命周期從客戶端對頁面發出HTTP請求時開始,並在服務器響應頁面時結束。
JSF生命周期分為運行階段和渲染階段兩個主要階段。

執行階段

當第一次請求時,構建或恢復應用程序視圖。對於其他後續請求,執行其他操作。
執行階段被進一步分成以下子階段:

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

渲染階段

在此階段,請求的視圖作為對客戶端瀏覽器的響應。視圖渲染是以HTML或XHTML生成輸出的過程。
在渲染過程中采取以下步驟:

  1. 當客戶端對index.xhtml網頁進行初始請求時,編譯應用程序。
  2. 應用程序在編譯後執行,並為應用程序構建一個新的組件樹,並放置在FacesContext中。
  3. 使用由EL表達式表示的組件和與其關聯受托管bean屬性填充組件樹。
  4. 基於組件樹。建立了新的視圖。
  5. 該視圖作為響應呈現給請求客戶端。
  6. 組件樹被自動銷毀。
  7. 在後續請求中,重新構建組件樹,並應用已保存的狀態。

JSF實現使用一個控制器servlet來處理請求,然後執行JSF生命周期。
如圖顯示了JSF生命周期中的事件處理。

技術分享圖片

JSF是基於事件驅動的,從"應用請求值"階段開始,JSF實現會創建事件並在每個生命周期階段期間將其添加到事件隊列中。

事件類型

(1)動作事件(Action Event):普通動作響應。
(2)即時事件(Immediate Event):立即處理,不驗證/轉換/更新模型值(即bean不會保存屬性)。
(3)值改變事件(Value Change Event):選擇UI值改變後,級聯調度。如國際化中選擇語言。
(4)階段事件(Phase Event):監聽響應的JSF生命周期。

事件監聽器可通過下列三種方式之一影響JSF生命周期:
(1) 讓生命周期正常進行。
(2) 調用FacesContext類的renderResponse方法以忽略生命周期的其他部分,直接跳轉到“呈現響應”階段。
(3) 調用FacesContext類的responseComplete方法以完全略過生命周期的其他階段。

參考源:

易百教程:https://www.yiibai.com/jsf/jsf-life-cycle.html
開源中國:https://my.oschina.net/zhaoqian/blog/71866
百度百科:https://baike.baidu.com/item/jsf%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F

Facelets

定義

Facelets是一種輕量級的頁面聲明語言,用於使用HTML樣式構建JSF視圖。
Facelets是用來建立JSF應用程序時的一個可供選擇的表現層技術。
Facelets提供了一個強大的模板化系統,使用HTML樣式的模板來定義JSF的表現層,減少了組件整合進表現層時候冗余的代碼。

功能

  • 使用XHTML創建網頁
  • 除了支持JSF和JSLT標記庫之外,還提供Facelets標簽庫
  • 支持表達語言(EL)
  • 使用組件和頁面模板

優點

  • 通過模板和復合組件增加代碼可重用性
  • 通過定制提供組件和其他服務器端對象的功能可擴展性
  • 編譯速度更快
  • 在編譯時驗證表達式語言
  • 高性能渲染能力

JSF(JavaServer Faces)技術支持各種標簽庫,以將組件添加到網頁。為了支持JavaServer Faces標簽庫機制,Facelets使用XML命名空間聲明。
Facelets支持的標簽庫有JSF Facelets標簽庫、JSF HTML標簽庫、JSF核心標簽庫、傳遞元素標簽庫、傳遞屬性標簽庫、復合組件標簽庫、JSTL核心標簽庫、JSTL函數標簽庫。

Facelets應用程序的生命周期

  1. 在客戶端使用Facelets創建的網頁發出新請求時生命周期開始。JSF創建一個新的組件樹或javax.faces.component.UIViewRoot並放入FacesContex。
  2. 如果可用的UIViewRoot應用於Facelets,視圖可以填充組件進行渲染。
  3. 新建的視圖作為對客戶端的響應而被渲染。
  4. 在渲染時,存儲此視圖的狀態用於下一個請求。存儲輸入組件和表單數據的狀態。
  5. 客戶端可以與視圖交互,並從JSF應用程序請求另一個視圖。此時,保存的視圖從存儲狀態恢復。
  6. 恢復視圖再次通過JSF生命周期,如果沒有驗證問題,並且沒有觸發任何操作,最終將生成新視圖或重新呈現當前視圖。
  7. 如果請求相同的視圖,則再次呈現存儲的視圖。
  8. 如果要求新視圖,則繼續執行第2步。
  9. 將新視圖作為對客戶端的響應。

參考源:

易百教程:https://www.yiibai.com/jsf/facelets.html
百度百科:https://baike.baidu.com/item/facelets/10077801?fr=aladdin

JSF Web框架與Facelets表現層技術