j2ee高級開發技術課程第六週

一.jsf(java server faces)的運行原理(工做方式)html

1.jsf應用是事件驅動的,當一個事件發生時(好比用戶單擊一個按鈕),事件通知經過HTTP發往服務器,服務器端使用叫作FacesServlet的特殊servlet處理該通知,web容器裏每個jsf應用都有它本身的FacesServlet;java

在後臺,每個jsf請求都觸發了3件事情:web

1)FacesServlet建立FacesContext(該對象中包含Web容器傳給FacesServlet的service方法的ServletContext,ServletRequest,ServletRespons對象,在處理過程當中主要就是修改這個FacesContext)服務器

2)FacesServlet把控制權交給Lifecyclejsp

3)Lifecycle分6個階段處理FacesContext(也即jsf生命週期過程)函數

二.jsf生命週期過程工具

1. 重建視圖: 創建組件樹,若是是首次渲染,則組件樹被重置合適的狀態;若是不是首次渲染,則組件樹被建立跳到響應階段(JSF的組件樹結構和DOM是同樣的,只不事後者是client前者是server)。性能

2. 應用請求值: 樹中的每一個組件都能從請求參數中提取到新的值,並把值存儲本地,以後處理全部與組件相關的事件進入隊列,若是某個組件的immediate屬性設置爲true,那麼驗證,轉換,以及與組件關聯的事件在這個階段被處理.ui

3. 處理驗證: 組件值轉換成與之相對應的數據類型。若是轉換失敗,這一階段將繼續完成全部剩餘的轉換器,驗證和運行所需的檢查,但在完成後,跳轉到生命週期的Render Response階段。若是驗證成功,則檢查組件上的required 的屬性。若是該屬性是必須的而且組件中輸入了值,那麼與之相關的驗證程序運行。若是required的屬性是必須但又沒有輸入值,這一階段完成(全部剩餘驗證程序還會繼續執行),而後生命週期跳躍到Render Response階段。若是required 屬性標識爲false,無論組件中有沒有輸入值,驗證過程都不會運行。spa

4. 更新模型: 驗證組件的本地值移動到模型中,同時本地副本被丟棄。

5. 調用應用程序: 執行應用級邏輯(如事件處理程序)。

6. 呈現響應: 呈現樹中的組件。後續請求和Restore View階段保存狀態信息。

 

2、Facelets

Facelets是一種輕量級的頁面聲明語言,用於使用HTML樣式構建JSF(JavaServer Faces)視圖。

它包括如下功能:

  • 它使用XHTML建立網頁。
  • 除了支持JavaServer Faces和JSTL標記庫以外,它還支持Facelets標籤庫。
  • 它支持表達語言(EL)。
  • 它是使用組件和頁面的模板。

優勢

  • 它經過模板和複合組件支持代碼可重用性。
  • 它經過定製提供組件和其餘服務器端對象的功能可擴展性。
  • 編譯時間更快
  • 它在編譯時驗證表達式語言。
  • 高性能渲染能力。

JSF(JavaServer Faces)技術支持各類標籤庫,以將組件添加到網頁。 爲了支持JavaServer Faces標籤庫機制,Facelets使用XML命名空間聲明。

下表顯示了Facelets支持的標籤庫。

標籤庫 URI 前綴 示例 內容
JSF Facelets標籤庫 http://xmlns.jcp.org/jsf/facelets ui: ui:componentui:insert 模板標籤
JSF HTML標籤庫 http://xmlns.jcp.org/jsf/html h: h:head,h:body 全部UI組件對象的JavaServer Faces組件標記
JSF核心標籤庫 http://xmlns.jcp.org/jsf/core f: f:actionListenerf:attribute JSF標籤獨立於任何特定渲染工具包的自定義操做
傳遞元素標籤庫 http://xmlns.jcp.org/jsf jsf: jsf:id 支持HTML5友好標記的標籤
傳遞屬性標籤庫 http://xmlns.jcp.org/jsf/passthrough p: p:type 支持HTML5友好標記的標籤
複合組件標籤庫 http://xmlns.jcp.org/jsf/composite cc: cc:interface 支持複合組件的標籤
JSTL核心標籤庫 http://xmlns.jcp.org/jsp/jstl/core c: c:forEachc:catch JSTL 1.2核心標籤
JSTL函數標籤庫 http://xmlns.jcp.org/jsp/jstl/functions fn: fn:toUpperCasefn:toLowerCase JSTL 1.2函數標籤

Facelets應用程序的生命週期

JSF規範定義了JavaServer Faces應用程序的生命週期。如下步驟爲基於 Facelets 的應用程序的過程描述。

  1. 生命週期是在客戶端使用Facelets建立的網頁發出新請求時啓動。 JSF建立一個新的組件樹或javax.faces.component.UIViewRoot並放入FacesContex

  2. 若是可用的UIViewRoot應用於Facelets, 視圖能夠填充組件進行渲染。

  3. 新建的視圖做爲對客戶端的響應而被渲染。

  4. 在渲染時,存儲此視圖的狀態用於下一個請求。 存儲輸入組件和表單數據的狀態。

  5. 客戶端能夠與視圖交互,並從JSF應用程序請求另外一個視圖。 此時,保存的視圖從存儲狀態恢復。

  6. 恢復視圖再次經過JSF生命週期,若是沒有驗證問題,而且沒有觸發任何操做,最終將生成新視圖或從新呈現當前視圖。

  7. 若是請求相同的視圖,則再次呈現存儲的視圖。

  8. 若是要求新視圖,則繼續執行【步驟2】。

  9. 將新視圖做爲對客戶端的響應。

相關文章
相關標籤/搜索