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