亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

JSP和JSF合并 打造完美Web層應用

2024-09-05 00:20:41
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  •   java在最近幾年逐漸升溫,隨著java se 5和java se 6的推出,java的未來更顯得無比輝煌。但以java為基礎的jsp在java se 5推出之前卻一直抬不起頭來,這最重要的原因就是jsp雖然功能十分強大,但最大的優點也是它的最大缺點,功能強大就意味著復雜,尤其是設計前端界面的可視化工具不多,也不夠強大。因此,設計jsp頁面就變得十分復雜和繁瑣...

      java在最近幾年逐漸升溫,隨著java se 5和java se 6的推出,java的未來更顯得無比輝煌。但以java為基礎的jsp在java se 5推出之前卻一直抬不起頭來,這最重要的原因就是jsp雖然功能十分強大,但最大的優點也是它的最大缺點,功能強大就意味著復雜,尤其是設計前端界面的可視化工具不多,也不夠強大。因此,設計jsp頁面就變得十分復雜和繁瑣。不過,在java se 5推出的同時,sun為了簡化jsp的開發難度,推出了新的javaserver faces(簡稱jsf)規范。從而使jsp走上了康莊大道。

      一、什么是jsf

      jsf和jsp是一對新的搭檔。jsp是用于后臺的邏輯處理的技術,而jsf恰恰相反,是使開發人員能夠快速的開發基于 java 的 web 應用程序的技術,是一種表現層技術。目前,jsf1.2已經正式作為一個標準加入了java ee 5中。

      作為一種高度組件化的技術,開發人員可以在一些開發工具的支持下,實現拖拉式編輯操作,用戶只需要簡單的將 jsf 組件拖到頁面上,就可以很容易的進行 web 開發了。這是其作為一種組件化的技術所具有的最大好處,我們能用的組件不光是一些比較簡單的輸入框之類,還有更多復雜的組件可以使用的,比如 datatable 這樣的表格組件, tree 這樣的樹形組件等等。

      作為一種標準的技術,jsf還得到了相當多工具提供商的支持。同時我們也會有很多很好的免費開發工具可以使用,前不久 sun java studio creator 2 和 oracle jdeveloper 10g 作為免費的支持 jsf 的開發工具發布,給 jsf 帶來了不小的生氣。另外我們也有一些很優秀的商業開發工具可共選擇,bea workshop (原 m7 nitrox),exadel,myeclipse 這樣的基于 eclipse 的插件開發工具,為現在廣大的 eclipse 用戶帶來了不小的便利,ibm 的 rational application developer 和 borland 的 jbuilder 也是很不錯的支持 jsf 可視化開發的商業開發工具。

    |||

      jsf和傳統的web技術有著本質上的差別,在傳統的web技術需要用戶自己對瀏覽器請求進行捕捉,保存客戶端狀態,并且手工控制著頁面的轉向,等等。而jsf的出現,無疑給我們帶來了巨大的便利,jsf 提供了事件驅動的頁面導航模型,該模型使應用程序開發人員能夠設計應用程序的頁面流。與 struts 的方式向類似的是,所有的頁面流信息都定義在 jsf 配置 xml 文件 (faces-config.xml) 中,而非硬編碼在應用程序中。這很大程度簡化了開發人員開發難度,簡化了應用程序的開發。

      同時jsf也是一種遵循模型-視圖-控制器 (mvc) 模式的框架。實現了視圖代碼(view)與應用邏輯(model)的完全分離,使得使用 jsf 技術的應用程序能夠很好的實現頁面與代碼的分離。所有對 jsf 頁面的請求都會通過一個前端控制器 (facesservlet) 處理,系統自動處理用戶的請求,并將結果返回給用戶。這和傳統的 mvc 框架并沒有太大的區別。

      在jsf中不僅使用了 pojo 技術,而且還使用了類似 spring 的控制反轉(ioc) (或稱為依賴注入-di) 技術,在 jsf 的 backing bean 中,我們可以把視圖所需要的數據和操作放進一個 backing bean 中。同時得益于 jsf 使用的 di 技術,我們可以在配置文件中初始化 managed bean,同時我們也可以通過這樣的技術很方便的和使用類似技術的 spring 進行整合。

      二、如何在jsp中使用jsf

      jsf只有通過和jsp相結合,才能充分發揮它的功效。jsf是通過標簽庫和jsp進行集成的。標簽庫就相當于asp.net的服務端組件。jsf提供了非常豐富的標簽庫,通過這些標簽庫,可以生成各種客戶端模型,如html、wml、xml以及javascript等。通過這些標簽,你可以很容易建立大規模的客戶端模型,并由這些標簽自動處理客戶端請求。

    |||

      接下來讓我們來看一個如何使jsf和jsp在一起工作的例子。在jsf中有兩個庫。第一個叫做內核庫,在這個庫中包含了各種主要的標簽,如配置組件、管理事件、驗證輸入信息等。第二個庫的主要功能是將html和jsf的各種標簽相對應。每一個jsf標簽都會對應一個html組件。如uiinput標簽對應了html中的文本框或密碼框。

      在jsf標簽中文本輸入框叫做inputtext,而密碼輸入庫叫inputsecret。下面是一個簡單的jsf和jsp結合的用戶接口程序。

    <%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html;charset=gb2312">
    <title>第一個jsf程序</title>
    </head>
    <body>
    ?。糵:view>
    ?。糷:form id="simpleform">
    ?。糷:outputtext id="favoritelabel" value="請輸入一個數字:"/>
    ?。糷:inputtext id="favoritevalue" value="#{simple.longvalue}">
    <f:validatelongrange maximum="30" minimum="0"/>
    ?。?h:inputtext>
    ?。紁/>
    ?。糷:commandbutton id="submit" value="提交" action="#{simple.simpleactionmethod}"/>
     </h:form>
    ?。?f:view>
    </body>
    </html>

      在上面的代碼中,我們可以了解到jsf是如何同jsp集成的。我們首先可以看到一個內核標簽:view。然后是幾個jsf組件。如form、outputtext、inputtext以及commandbutton。這幾個組件被放到form中從而開成了form中的一部分。在程序的最開始,必須使用import導入兩個標簽庫。代碼如下。

    |||,歡迎訪問網頁設計愛好者web開發。<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
    <%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

      上面2行代碼聲明了jsp中要使用哪一個jsf標簽庫。內核庫使用前綴(prefix)f聲明,而html庫使用前綴(prefix)h聲明。這兩個前綴并不是必須要使用,而只是一個建議。在程序中,內核庫必須要使用,因為view在所有的jsf頁中必須使用。而html標簽在運行時將jsf標簽轉化為html組件,這個h前綴并不是必須的,而是jsf規范推薦使用的,這樣,我們使我們的jsf程序更易讀。

      在聲明后是幾行標準的html語句,本文不再詳述。從 f:view 開始,是一段jsf語句。這段代碼如下所示:

    <f:view>
    <h:form id="simpleform">
    <h:outputtext id="favoritelabel" value="請輸入一個數字:"/>
    <h:inputtext id="favoritevalue" value="#{simple.longvalue}">
    <f:validatelongrange maximum="30" minimum="0"/>
    </h:inputtext>
    <p/>
    <h:commandbutton id="submit" value="提交"
    action="#{simple.simpleactionmethod}"/>
    </h:form>
    </f:view>

      /f:view 標簽預示著jsf的開始,而它的下一個標簽form將建立一個html form。而outputtext標簽相當于html中的label組件。inputtext標簽相當于html中的textfield組件。而commandbutton標簽相當于html中的submit按鈕。

      三、jsp如何響應jsf的請求

      從上面的例子我們已經知道如何在jsp中使用jsf了,在這一部分讓我們來看看在jsf是如何處理請求的。

    |||
    |||

      在程序的前兩行是導入jsf核心庫和html庫,這個在前面已經討論過,在這里不再詳述。

      下面讓我們來看看jsf標簽是如何同后端進行交互的。由于我們是在jsp中使用jsf,因此,這個和正常的jsp沒有什么區別;jsp實際上就是servlet,在jsp第一次運行時由jsp編譯器將.jsp文件編譯成servlet后再由servlet調用,然后由servlet來接收客戶端傳過來的數據流。但和一般的jsp程序不同的是,jsf標簽是由jsf api負責調用的(這樣可以做到邏輯層和表現層分離),除此之外,它們和一般的jsp標簽沒有任何區別。

      當uicomponent標簽收到dostarttag方法時,jsf將使用這些屬性來設置標簽的值。如本例中的inputtext標簽將按它的屬性值來設置。下面是jsf的代碼片段。

    <h:inputtext id="temperature" value="#{tc.fahrenheittemp}">
    ?。糵:validatedoublerange minimum="-100.0" maximum="100.0"/>
     <f:valuechangelistener type="tempconv.page.tcchangedlistener"/>
    </h:inputtext>

      inputtext標簽根據相應的值設置了id和value的屬性。在jsf中是通過setattribute(string name, object value)設置每一個屬性值的。但我們需要注意的是jsf標簽可以指定相應的默認值。這有些類似java中的系統屬性,如果你給了一個屬性名子,那系統將返回這個屬性的值,如果指定它的默認值,并且這個屬性不存在的話,將返回這個默認值。

      接下來讓我們來看看上面程序的最重要的部分,也就是uiinput組件的事件處理。

    <f:valuechangelistener type="tempconv.page.tcchangedlistener"/>

      在jsf中事件處理是由valuechangelistener標簽完成的。這個標簽所表示的事件在文本框的值發生變化時引發事件。但有意思的是這個事件并不馬上提交,而是要等到用戶點擊"提交"按鈕后這個事件連同相應的數據才提交給后端。因此,這個事件請求也叫做預提交。最后,讓我們看看uicommand的代碼實現。

    <div>
    ?。糷:commandbutton value="轉換" action="#{tc.convert}">
    ?。?h:commandbutton>
    </div>

      上面的代碼將convert()方法和uicommand連接了起來,也就是說,點擊"提交"按鈕后,將執行convert()方法。在遇到view標簽后,jsf程序結果,jsfapi最后調用doend方法來結束jsf程序。jsf引擎在解析這段程序后,將相應的jsf標簽轉換為html組件。

      最后,讓我們來看看jsp是如何響應jsf事件的。下面是一段響應jsf事件的java代碼。

    publicclasstcchangedlistenerimplementsvaluechangelistener
    {
    publictcchangedlistener()
    {
    super();
    }
    //事件處理
    publicvoidprocessvaluechange(valuechangeeventevent)
    throwsabortprocessingexception
    {
    uicomponentcomp=event.getcomponent();
    objectvalue=event.getnewvalue();
    if(null!=value)
    {
    floatcurval=((number)value).floatvalue();
    mapvalues=comp.getattributes();
    if(curval<0)
    {
    values.put("styleclass","red");
    }
    else
    {
    values.put("styleclass","black");
    }
    }
    }

      要想響應jsf事件,必須要實現jsf庫中的valuechangelistener接口。上面的程序要注意的是最后根據輸入的值來設置相應的顏色。這些值并不依賴jsp。當然,你也可以將它們設置成null,而由jsp 標簽來設置它們的顏色.

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    这里只有精品在线播放| 成人免费网视频| 色一情一乱一区二区| 国产精品美乳一区二区免费| 久久免费国产视频| 国产精品亚洲激情| 亚洲欧美日韩国产成人| 人体精品一二三区| 久久天天躁夜夜躁狠狠躁2022| 欧美精品电影在线| 亚洲精品久久久久久久久久久久久| 91精品视频播放| 亚洲男子天堂网| 日韩亚洲国产中文字幕| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美在线观看一区二区三区| 日韩最新av在线| 国产欧美一区二区三区在线| 欧美区二区三区| 黑人精品xxx一区| 欧美日韩国产色视频| 亚洲美女视频网| 亚洲男人的天堂在线| 日韩精品视频在线播放| www欧美xxxx| 日韩国产在线播放| 91精品国产自产在线| 久久久国产精品亚洲一区| 日韩成人av网| 欧美精品福利在线| 日本一区二区在线免费播放| 亚洲国产三级网| 亚洲第一页在线| 亚洲男人的天堂在线播放| 欧美亚洲视频在线看网址| 日韩av网址在线| 91在线观看免费| xx视频.9999.com| 亚洲日韩欧美视频一区| 国产一区二区三区视频| 日韩国产一区三区| 亚洲欧美日韩另类| 国产精品美女主播在线观看纯欲| 久久精品国产亚洲精品2020| 亚洲人在线视频| 色偷偷av亚洲男人的天堂| 中文字幕欧美专区| 日韩欧美在线字幕| 日韩电影中文字幕av| 日韩成人av在线播放| 欧美视频在线免费| 成人h猎奇视频网站| 亚洲老板91色精品久久| 97视频在线观看播放| 亚洲视频在线视频| 欧美性猛交xxxx乱大交极品| 日韩av一区在线| 国产999精品视频| 成人免费xxxxx在线观看| 福利一区视频在线观看| 国产亚洲精品久久久久动| 亚洲色图色老头| 在线a欧美视频| 欧美又大又粗又长| 亚洲欧美国产一区二区三区| 亚洲理论在线a中文字幕| 亚洲精品国产精品自产a区红杏吧| 国产精品网红福利| 国产欧美日韩91| 欧美激情第一页xxx| 亚洲qvod图片区电影| 国产精品99久久久久久人| 日韩成人高清在线| 久久夜色精品亚洲噜噜国产mv| 久久男人资源视频| 欧美一级在线播放| 美女性感视频久久久| 97色在线观看| 欧美丰满少妇xxxxx| 97精品久久久中文字幕免费| 亚洲精品国产suv| 国产精品欧美久久久| 国内精品国产三级国产在线专| 欧美电影免费观看电视剧大全| 国产视频自拍一区| 91精品啪aⅴ在线观看国产| xxxx性欧美| 国产91精品高潮白浆喷水| 国产精品最新在线观看| 久久琪琪电影院| 日韩中文字幕欧美| 精品亚洲aⅴ在线观看| 综合欧美国产视频二区| 黑人巨大精品欧美一区二区免费| 国产精品福利在线| 欧美日韩中文字幕综合视频| 亚洲成人激情在线观看| 亚洲国产精品久久精品怡红院| 国产精品极品尤物在线观看| 久久影视电视剧免费网站清宫辞电视| 久久久成人精品| 亚洲精品中文字幕女同| 69国产精品成人在线播放| 日韩亚洲成人av在线| 欧美成人午夜激情在线| 亚洲欧洲一区二区三区久久| 亚洲欧美国产制服动漫| 国产精品户外野外| 91日本在线观看| 免费99精品国产自在在线| 久久久精品在线观看| 欧美孕妇毛茸茸xxxx| 国产精品主播视频| 精品无人国产偷自产在线| 欧美日韩国产黄| 欧美激情精品久久久久久| 国产欧美va欧美va香蕉在线| 亚洲精品国产免费| 亚洲图片制服诱惑| 久久久久久久香蕉网| 午夜精品久久久久久久99热浪潮| 色悠悠久久88| 中文字幕亚洲国产| 欧美性理论片在线观看片免费| 国产视频精品免费播放| 日韩国产中文字幕| 亚洲а∨天堂久久精品喷水| 国产成人免费av电影| 日韩视频在线免费观看| 久久中文字幕在线视频| 亚洲精品白浆高清久久久久久| 久久人人看视频| 黑人精品xxx一区| 性欧美在线看片a免费观看| 日韩欧美国产免费播放| 国产一区二区丝袜| 国产视频精品va久久久久久| 68精品国产免费久久久久久婷婷| 欧美理论在线观看| 欧美丰满少妇xxxxx做受| 欧美激情视频网站| 久久久人成影片一区二区三区观看| 国产精品网站入口| 91青草视频久久| 国产精品99久久久久久久久久久久| 亚洲福利视频久久| 国产精品电影久久久久电影网| 亚洲石原莉奈一区二区在线观看| 欧美亚洲在线观看| 亚洲第一中文字幕| 国产精品三级在线| 亚洲尤物视频网| 亚洲第一天堂无码专区| 91久久夜色精品国产网站| 精品少妇v888av| 国产中文字幕日韩| 懂色aⅴ精品一区二区三区蜜月| 欧美午夜丰满在线18影院| 欧美日韩性生活视频| 亚洲精品女av网站| 欧美性色19p| 8x拔播拔播x8国产精品| 欧美在线视频一区二区| 亚洲国内精品在线|