開發人員認為,如果有合適的工具來創建交互式Web界面,他們就能將時間集中在核心需求和定制上,並在規定時間內及時得交付應用程序。與其他技術如JavaServer Pages或apache Struts 相比,JavaServer Faces (JSF)技術為創建交互式Web應用程序帶來了很多便利。JSF在程序邏輯和GUI表示之間劃出一條清晰的界限,提高了對Web程序的維護能力,並為 Web用戶界面組件的開發和重用提供了一個框架。
如今,許多Web應用程序開發人員都在轉而使用JSF,但是他們發現,預先定制的JSF UI組件受到基本DHtml窗口部件的限制。監管或業務流程監控之類的高級應用程序需要能與JSF框架兼容的高級可視化組件。JSF框架的標准化使它易於開發能夠重用的自定義Web GUI組件。另外,Web組件開發商現在能提供更復雜的組件,並承諾Web應用程序開發人員能夠輕松地使用這些組件。此類JSF用戶界面組件必須集成並部署到JSF運行時框架中去,並在其中完全展開,還必須在設計時很好地集成到提供JSF支持的IDE中去。
盡管JSF帶來了標准用戶界面框架,但對於開發第一個自定義JSF組件而言,還是存在幾個缺陷和漏洞。讓我們看看怎樣創建一個純HTML無法輕松創建的圖形JSF組件。圖形JSF組件的特點不僅要求生成DHtml,而且還需要對圖像生成和客戶端交互提供補充支持。我們將以一個圖形組件的例子來闡述這些特點。該圖形組件能夠提供曲線圖,並為各種客戶端導航和交互提供便利。我們還會了解到將該圖形組件集成到JSF-enabled IDE中所需要的步驟。通過理解圖形組件的設計方法,您將會更好地理解如何實現JSF組件,而這應該能使您開發出定制的JSF圖形組件。
什麼是JSF?
JSF是一種能夠簡化Web應用程序表示層結構的標准服務器端框架。定義 JSF框架的JSR 127(參見參考資料)帶有一個能提供基本UI組件(如輸入欄和按紐)的參考實現。您可以將可重用用戶界面組件集中起來創建Web頁,將這些組件綁定到應用數據源上,並用服務器端事件控制程序處理客戶端事件。根據說明書介紹,組件供應商能編寫與JSF運行時框架集成的組件,並將其集成到在設計時與JSF兼容的IDE中去。
從很大程度上講,JSF組件同在HTML 2.0技術要求下可用的HTML組件和標簽直接相符合。對許多Web應用程序而言,這套相對簡單的組件是夠用的。然而,許多應用程序如監管或監控程序需要更復雜的數據顯示與交互,比如制表、制圖和映射。由於JSF組件在HTML中直接提交復雜圖形小部件的能力有限,所以設計這些高級組件的能力並不突出。解決方案要求服務器端組件向客戶傳輸圖像,卻會給自身帶來問題,因為在基本Html圖像上進行交互要受到限制。最後,使用JavaScript時,必須能調用客戶端交互來使用戶能對數據進行導航和交互。
讓我們看看開發一個簡單的、將CSS輸入HTML頁面的JSF組件需要哪些步驟。當開發高級JSF圖形組件時,這一簡單組件的描述和代碼樣本會作為背景。顯示了如何使用即將開發的組件,並顯示將要得到的結果。使用這種組件的好處是能夠通過改變某個JSF動作的組件值,來改變整個頁面的外觀。顯示了我們如何使用一個非常簡單的JSF組件將CSS輸入某個Html頁面並得出結果。
開發自定義JSF組件
JSF組件包含若干個Java類和配置文件。為創建一個自定義JSF組件,您需要開發一個擴展JSF基本組件類的Java類;為默認呈現軟件包開發呈現程序;開發一個將在JSP頁面中用於描述標簽的Java類;編寫一個標簽庫定義(TLD)文件;編寫JSF配置文件。讓我們更深入地了解這5個步驟。
開發組件Java類。組件類負責管理代表組件狀態的屬性。因此,我們必須根據組件的行為(如輸入組件或輸出組件),給組件選擇適當的基類。這裡描述的組件可進行擴展 Javax.faces.component.UIOutput,以顯示指向某個樣式表文件的URL,或內聯式樣式表的內容。該組件可用於在JSF動作中將某個樣式表轉換成另一個樣式表。關聯屬性規定著值的類型:要麼是一個URL,要麼是內聯樣式。該組件還必須能夠在向服務器發送請求期間,使用經過JSF 框架處理的對象,來存儲並修復自己的狀態。組件的狀態由重建對象所需的重要屬性值組成。JSF框架自動調用saveState()和 restoreState()方法,我們可以在組件中實現這兩種方法來達到這一目標。