發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
Java在最近幾年逐漸升溫,隨著Java SE 5和Java SE 6的推出,Java的未來更顯得無比輝煌。但以Java為基礎(chǔ)的JSP在Java SE 5推出之前卻一直抬不起頭來,這最重要的原因就是JSP雖然功能十分強大,但最大的優(yōu)點也是它的最大缺點,功能強大就意味著復(fù)雜,尤其是設(shè)計前端界面的可視化工具不多,也不夠強大。因此,設(shè)計JSP頁面就變得十分復(fù)雜和繁瑣。不過,在Java SE 5推出的同時,Sun為了簡化JSP的開發(fā)難度,推出了新的JavaServer Faces(簡稱JSF)規(guī)范。從而使JSP走上了康莊大道。 一、什么是JSF JSF和JSP是一對新的搭檔。JSP是用于后臺的邏輯處理的技術(shù),而JSF恰恰相反,是使開發(fā)人員能夠快速的開發(fā)基于 Java 的 Web 應(yīng)用程序的技術(shù),是一種表現(xiàn)層技術(shù)。目前,JSF1.2已經(jīng)正式作為一個標(biāo)準(zhǔn)加入了Java EE 5中。 作為一種高度組件化的技術(shù),開發(fā)人員可以在一些開發(fā)工具的支持下,實現(xiàn)拖拉式編輯操作,用戶只需要簡單的將 JSF 組件拖到頁面上,就可以很容易的進(jìn)行 Web 開發(fā)了。這是其作為一種組件化的技術(shù)所具有的最大好處,我們能用的組件不光是一些比較簡單的輸入框之類,還有更多復(fù)雜的組件可以使用的,比如 DataTable 這樣的表格組件, Tree 這樣的樹形組件等等。 作為一種標(biāo)準(zhǔn)的技術(shù),JSF還得到了相當(dāng)多工具提供商的支持。同時我們也會有很多很好的免費開發(fā)工具可以使用,前不久 Sun Java Studio Creator 2 和 Oracle JDeveloper 10g 作為免費的支持 JSF 的開發(fā)工具發(fā)布,給 JSF 帶來了不小的生氣。另外我們也有一些很優(yōu)秀的商業(yè)開發(fā)工具可共選擇,BEA Workshop (原 M7 NitroX),Exadel,MyEclipse 這樣的基于 Eclipse 的插件開發(fā)工具,為現(xiàn)在廣大的 Eclipse 用戶帶來了不小的便利,IBM 的 Rational Application Developer 和 Borland 的 JBuilder 也是很不錯的支持 JSF 可視化開發(fā)的商業(yè)開發(fā)工具。 JSF和傳統(tǒng)的Web技術(shù)有著本質(zhì)上的差別,在傳統(tǒng)的Web技術(shù)需要用戶自己對瀏覽器請求進(jìn)行捕捉,保存客戶端狀態(tài),并且手工控制著頁面的轉(zhuǎn)向,等等。而JSF的出現(xiàn),無疑給我們帶來了巨大的便利,JSF 提供了事件驅(qū)動的頁面導(dǎo)航模型,該模型使應(yīng)用程序開發(fā)人員能夠設(shè)計應(yīng)用程序的頁面流。與 Struts 的方式向類似的是,所有的頁面流信息都定義在 JSF 配置 XML 文件 (faces-config.xml) 中,而非硬編碼在應(yīng)用程序中。這很大程度簡化了開發(fā)人員開發(fā)難度,簡化了應(yīng)用程序的開發(fā)。 同時JSF也是一種遵循模型-視圖-控制器 (MVC) 模式的框架。實現(xiàn)了視圖代碼(View)與應(yīng)用邏輯(Model)的完全分離,使得使用 JSF 技術(shù)的應(yīng)用程序能夠很好的實現(xiàn)頁面與代碼的分離。所有對 JSF 頁面的請求都會通過一個前端控制器 (FacesServlet) 處理,系統(tǒng)自動處理用戶的請求,并將結(jié)果返回給用戶。這和傳統(tǒng)的 MVC 框架并沒有太大的區(qū)別。 在JSF中不僅使用了 POJO 技術(shù),而且還使用了類似 Spring 的控制反轉(zhuǎn)(IoC) (或稱為依賴注入-DI) 技術(shù),在 JSF 的 Backing Bean 中,我們可以把視圖所需要的數(shù)據(jù)和操作放進(jìn)一個 Backing Bean 中。同時得益于 JSF 使用的 DI 技術(shù),我們可以在配置文件中初始化 Managed Bean,同時我們也可以通過這樣的技術(shù)很方便的和使用類似技術(shù)的 Spring 進(jìn)行整合。
三、JSP如何響應(yīng)JSF的請求 從上面的例子我們已經(jīng)知道如何在JSP中使用JSF了,在這一部分讓我們來看看在JSF是如何處理請求的。 首先讓我們來看一個例子,這個例子是將華氏度轉(zhuǎn)換為攝氏度。當(dāng)用戶點擊提交按鈕時程序?qū)⑦M(jìn)行轉(zhuǎn)換。 ?。?@ taglib uri="http://java./jsf/html" prefix="h" %> <%@ taglib uri="http://java./jsf/core" prefix="f" %> ?。糷tml> ?。糷ead> ?。糾eta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=GB2312"> ?。紅itle>溫度轉(zhuǎn)換程序</title> </head> ?。糱ody> ?。糵:view> ?。糷:form> <div> ?。糷:outputText id="fahrenheitLabel" value="請輸入華氏溫度:"/> ?。約pan> ?。糷:inputText id="temperature" value="#{tc.fahrenheitTemp}"> <f:validateDoublerange minimum="-100.0" maximum="100.0"/> ?。糵:valuechangeListener type="tempconv.page.TCChangedListener"/> </h:inputText> ?。?span> ?。?div> <div> ?。糷:outputText id="celsiusLabel" value="攝氏溫度:"/> ?。約pan> ?。糷:outputText id="celsiusValue" value="#{tc.celsiusTemp}"> ?。糵:convertNumber maxFractionDigits="3" type="number"/> ?。?h:outputText> </span> ?。?div> ?。糳iv> ?。糷:commandButton value="轉(zhuǎn)換" action="#{tc.convert}"> ?。?h:commandButton> ?。?div> </h:form> ?。?f:view> ?。?body> </html> 在程序的前兩行是導(dǎo)入JSF核心庫和HTML庫,這個在前面已經(jīng)討論過,在這里不再詳述。 下面讓我們來看看JSF標(biāo)簽是如何同后端進(jìn)行交互的。由于我們是在JSP中使用JSF,因此,這個和正常的JSP沒有什么區(qū)別;JSP實際上就是Servlet,在JSP第一次運行時由JSP編譯器將.JSP文件編譯成Servlet后再由Servlet調(diào)用,然后由Servlet來接收客戶端傳過來的數(shù)據(jù)流。但和一般的JSP程序不同的是,JSF標(biāo)簽是由JSF API負(fù)責(zé)調(diào)用的(這樣可以做到邏輯層和表現(xiàn)層分離),除此之外,它們和一般的JSP標(biāo)簽沒有任何區(qū)別。
當(dāng)UIComponent標(biāo)簽收到doStartTag方法時,JSF將使用這些屬性來設(shè)置標(biāo)簽的值。如本例中的inputText標(biāo)簽將按它的屬性值來設(shè)置。下面是JSF的代碼片段。 ?。糷:inputText id="temperature" value="#{tc.fahrenheitTemp}"> <f:validateDoublerange minimum="-100.0" maximum="100.0"/> ?。糵:valuechangeListener type="tempconv.page.TCChangedListener"/> ?。?h:inputText> inputText標(biāo)簽根據(jù)相應(yīng)的值設(shè)置了id和value的屬性。在JSF中是通過setAttribute(String name, Object value)設(shè)置每一個屬性值的。但我們需要注意的是JSF標(biāo)簽可以指定相應(yīng)的默認(rèn)值。這有些類似java中的系統(tǒng)屬性,如果你給了一個屬性名子,那系統(tǒng)將返回這個屬性的值,如果指定它的默認(rèn)值,并且這個屬性不存在的話,將返回這個默認(rèn)值。 接下來讓我們來看看上面程序的最重要的部分,也就是UIInput組件的事件處理。 ?。糵:valuechangeListener type="tempconv.page.TCChangedListener"/> 在JSF中事件處理是由valuechangeListener標(biāo)簽完成的。這個標(biāo)簽所表示的事件在文本框的值發(fā)生變化時引發(fā)事件。但有意思的是這個事件并不馬上提交,而是要等到用戶點擊"提交"按鈕后這個事件連同相應(yīng)的數(shù)據(jù)才提交給后端。因此,這個事件請求也叫做預(yù)提交。最后,讓我們看看UICommand的代碼實現(xiàn)。 ?。糳iv> <h:commandButton value="轉(zhuǎn)換" action="#{tc.convert}"> ?。?h:commandButton> </div> 上面的代碼將convert()方法和UICommand連接了起來,也就是說,點擊"提交"按鈕后,將執(zhí)行convert()方法。在遇到view標(biāo)簽后,JSF程序結(jié)果,JSFAPI最后調(diào)用doEnd方法來結(jié)束JSF程序。JSF引擎在解析這段程序后,將相應(yīng)的JSF標(biāo)簽轉(zhuǎn)換為HTML組件。 最后,讓我們來看看JSP是如何響應(yīng)JSF事件的。下面是一段響應(yīng)JSF事件的Java代碼。 public class TCChangedListener implements ValueChangeListener { public TCChangedListener() { super(); } // 事件處理 public void processValueChange(ValueChangeEvent event) throws AbortProcessingException { UIComponent comp = event.getComponent(); Object value = event.getNewValue(); if (null != value) { float curVal = ((Number) value).floatValue(); Map values = comp.getAttributes(); if (curVal < 0) { values.put("styleClass", "red"); } else { values.put("styleClass", "black"); } } } 要想響應(yīng)JSF事件,必須要實現(xiàn)JSF庫中的ValueChangeListener接口。上面的程序要注意的是最后根據(jù)輸入的值來設(shè)置相應(yīng)的顏色。這些值并不依賴JSP。當(dāng)然,你也可以將它們設(shè)置成null,而由JSP 標(biāo)簽來設(shè)置它們的顏色.
來自: 漂在北方的狼 > 《JSP規(guī)范》
0條評論
發(fā)表
請遵守用戶 評論公約
學(xué)習(xí)JSF 標(biāo)簽
JSF提供了標(biāo)準(zhǔn)的HTML Renderer Kit,可以讓您搭配JSF組件輸出HTML文件,標(biāo)準(zhǔn)的HTML Renderer Kit主要包括了幾個類別: 輸出(Outputs)其名稱以output作為開頭,作用為輸出指定的信息或綁定值。(2)outp...
JSF VS Tapestry 全面比較(二)
隨著時間的推移,JSF標(biāo)簽的簡潔可幫助你很快的編寫表現(xiàn)層代碼,同時也降低了開發(fā)者對jsf設(shè)計工具的依賴。盡管JSF設(shè)計工具提供了簡單的圖形化的方法來構(gòu)建和預(yù)覽JSF應(yīng)用,但是在一個開發(fā)中,頁面設(shè)計人...
JR - 精品文章 - JSF開發(fā)實戰(zhàn)(二)
JSF開發(fā)實戰(zhàn)(二)JSF開發(fā)實戰(zhàn)的第一篇(jsf開發(fā)實戰(zhàn)一)演示了如何建立一個最簡單的JSF應(yīng)用,從那個例子中我們可以觀察到JSF的頁面組件是如...
集成JSP/JSF和XML/XSLT
集成JSP/JSF和XML/XSLT.自從JSP 1.1以來,JSP最佳實踐已經(jīng)取得了顯著的進(jìn)展,雖然它們當(dāng)時實際上還不存在,但是這種樣式的JSP頁面仍然普...
用JSF和MyFaces上傳文件
配置 JSF 和MyFaces Extensions目前最主要的實現(xiàn)JSF規(guī)范的框架有JSF Reference Implementation (RI)以及Apache提供的MyFaces。MyForm.js...
JSF實現(xiàn)的自選語言界面
下面再來看簡體中文的資源文件: 簡體中文的資源文件ApplicationMessages_zh_CN.properties button_submit=提交 button_reset=重置 butt...
MyEclipse下開發(fā)JSF(2)
在這部分我們將創(chuàng)建兩個jsp頁面,一個是用戶登錄的頁面,另一個是表明登錄成功的頁面.這兩個頁面各自為loginUser.jsp和 loginUserSuccess....
Jsp和Servlet的聯(lián)系與區(qū)別
jsp是servlet的一種簡化,jsp編譯后是"類servlet"。Jsp由html代碼和jsp標(biāo)簽構(gòu)成可以方便地編寫動態(tài)網(wǎng)頁,在struts框架中,jsp位于MVC設(shè)計模式的視圖層,而servlet位于控制層。總之,使用jsp...
JAVA Web框架比較
JAVA Web框架比較JAVA Web框架比較。頁面邏輯:由眾多Java Web框架的開發(fā)人員組成的一個團隊......Java Web Alignment Group,這其中包括了Struts,Webwork,JSF,Beehive,JBoss Seam,Spring MVC等眾...
微信掃碼,在手機上查看選中內(nèi)容