博學(xué)而篤志,好問(wèn)而近思

          關(guān)于JSF及其運(yùn)行機(jī)制[轉(zhuǎn)載]

          ????????????????????????????????????關(guān)于JSF及其運(yùn)行機(jī)制

          1概述:

          ??? JSF(Java Server Faces)是基于MVC模式的新一代web framework,是一套JCP支持的新一代web開(kāi)發(fā)規(guī)范,各個(gè)廠商可以定義自己的JSF實(shí)現(xiàn),使開(kāi)發(fā)更加容易.

          JSF具有一下優(yōu)點(diǎn): (1)基于MVC,可以有效的將數(shù)據(jù)顯示與業(yè)務(wù)邏輯分開(kāi)處理.(2)有功能強(qiáng)大豐富的web開(kāi)發(fā)組件,可以可視化的設(shè)計(jì)開(kāi)發(fā)web應(yīng)用程序.(3)事件驅(qū)動(dòng),這是JSF比較重要的特點(diǎn),這種機(jī)制大大減少了開(kāi)發(fā)時(shí)間,提高了開(kāi)發(fā)效率.


          2.
          配置

          ??? JSF是一個(gè)標(biāo)準(zhǔn)的web framework,是以Servlet為調(diào)度核心,因此,如果想正常運(yùn)行JSF程序,必須把JSF作為servlet來(lái)運(yùn)行,后綴名為:.faces,示例代碼如下(web.xml):

          ??? 也需要把JSF的幾個(gè)庫(kù)文件(jsf-*.jar)放到web應(yīng)用程序的lib.

          JSF是作為Servlet來(lái)運(yùn)行,也有自己的配置文件,就是上面param所指定的faces-config.xml,這個(gè)文件中配置了JSF正確運(yùn)行需要的一些信息,包括managed-bean(JSF web頁(yè)面中需要的beanmanaged的方式配置起來(lái),這樣,就可以在web 頁(yè)面中直接調(diào)用該bean 的屬性和方法),navigation-rule(JSF頁(yè)面之間的流轉(zhuǎn)/調(diào)度配置)…….

          JSF程序在web頁(yè)面中也表現(xiàn)為custom tab,也就是說(shuō),JSF也跟strtus一樣,有自己的一套tab library,它通過(guò)解析這些tag來(lái)實(shí)現(xiàn)對(duì)JSF程序的控制.目前,JSF2tab:jsf_core.tldhtml_basic.tld,從名字上可以看出來(lái),第一個(gè)主要是核心JSF程序使用的tag,包括view(所有的JSF程序都必須有的tag),loadBundle(資源相關(guān)),validator(校驗(yàn)相關(guān))等等.第二個(gè)是web頁(yè)面設(shè)計(jì)相關(guān)的的一些html組件tag,這些組件,可以組成普通或者復(fù)雜的web應(yīng)用程序.

          這里提一下,JSF最主要的特性之一,事件驅(qū)動(dòng),就是通過(guò)html組件來(lái)體現(xiàn)的,在定義了一個(gè)按鈕(commandButton)以后,只要定義一下它的action,就可以直接的將這個(gè)動(dòng)作映射到后臺(tái)的某個(gè)managed-bean的某個(gè)方法上,這樣,大大減少了原來(lái)中間層的javascript調(diào)用,也就縮短了開(kāi)發(fā)時(shí)間,并且,也減少了中間出錯(cuò)的幾率.

          ?

          3.最簡(jiǎn)單的例子

          ??? 想迅速了解JSF的運(yùn)行機(jī)制以及使用JSF,我試著做一個(gè)最簡(jiǎn)單的例子,來(lái)觀察JSF的運(yùn)行.例子的基本想法是:兩個(gè)基本的jsp頁(yè)面(基于JSF,也就是說(shuō),要引入JSFtag lib),一個(gè)后臺(tái)的Bean,Bean中有一個(gè)示例的可以調(diào)用的方法.在第一個(gè)頁(yè)面中,有一個(gè)按鈕,將按鈕的action對(duì)應(yīng)到Bean中的方法(通過(guò)faces-config.xmlmanaged-bean來(lái)定義),這樣,當(dāng)點(diǎn)擊按鈕的時(shí)候,調(diào)用該方法,并且,頁(yè)面跳轉(zhuǎn)到第二個(gè)web頁(yè)面(通過(guò)faces-config.xmlnavigation-rule來(lái)定義).

          ??? 通過(guò)一番緊張的配置,寫(xiě)代碼,查錯(cuò),改錯(cuò)……,例子終于可以正確運(yùn)行,達(dá)到了我想預(yù)期的目標(biāo),具體各個(gè)文件可能如下:

          faces-config.xml

          兩個(gè)jsp頁(yè)面分別為userList.jspuserDetail.jsp,上面的配置文件意思就是說(shuō),當(dāng)我調(diào)用到”addUser”action的時(shí)候,頁(yè)面就跳轉(zhuǎn)到userDetail.jsp.定義的demoDemoBean的實(shí)例,是由JSF來(lái)初始化,web頁(yè)面中直接調(diào)用即可.

          userList.jsp

          ??? 這個(gè)文件中,會(huì)有這樣一塊兒代碼:

          ??? <f:view>

          ?????? <h:form id="UserListForm" rendered="true">

          ?????????????<h:outputText>[tag outputText]</h:outputText>

          ?????????????<h:commandButton value="Exec Add User" rendered="true" action="#{demo.addUser}"id="btnAddUser" image="images/BuyBtn.gif" type="submit"/>

          ?????? </h:form>

          ??? </f:view>????

          ??? 定義了JSF頁(yè)面需要的最基本的view,html-form和一個(gè)command button,通過(guò)點(diǎn)擊這個(gè)command button 來(lái)調(diào)用后臺(tái)的demo.addUser方法,來(lái)實(shí)現(xiàn)真正的業(yè)務(wù)邏輯.這個(gè)過(guò)程中,我么不必考慮JSF是如何把這個(gè)demo.addUser對(duì)應(yīng)到后臺(tái)的方法上的,只要寫(xiě)這樣對(duì)應(yīng)寫(xiě),就可以了.

          ??? userDetail.jsp

          ??? 如果寫(xiě)都可以了.這個(gè)例子中,userDetail.jsp只是一個(gè)流轉(zhuǎn)點(diǎn).

          ??? DemoBean.java

          ??? 注意:這里該方法要定義為String類(lèi)型,返回的字符串就是在faces-config.xml中定義的navigation-rule -> navigation-case - > from-outcome,JSF也就是通過(guò)這個(gè)來(lái)找到userDetail.jsp頁(yè)面進(jìn)行調(diào)度的.

          ??? 通過(guò)這個(gè)例子,我們可以大致明白了JSF的一些基本原來(lái)和運(yùn)行方式,接下來(lái),我們就可以仔細(xì)研究每個(gè)html控件的方法和屬性,以及jsf-core中其它的一些tag,能夠帶給我們的好處了.

          來(lái)自:http://www.5inet.net/Develop/Java/032008,JSF(Java_Server_Faces)HuaXiRiJi_1.aspx

          posted on 2006-10-23 09:41 冰川 閱讀(1356) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: 關(guān)于JSF及其運(yùn)行機(jī)制[轉(zhuǎn)載] 2006-10-24 10:11 蘿卜青菜

          講的似乎是自定義標(biāo)簽,學(xué)習(xí)一下,大家互相學(xué)習(xí)進(jìn)步!  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2006年10月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(14)

          隨筆檔案

          BlogJava的幫助

          朋友的博客

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          快樂(lè)工作—享受生活
          主站蜘蛛池模板: 永登县| 永顺县| 靖江市| 莆田市| 海口市| 阿勒泰市| 武强县| 吉首市| 秦安县| 德钦县| 得荣县| 尉氏县| 齐齐哈尔市| 铅山县| 隆尧县| 黄石市| 石城县| 都江堰市| 沁阳市| 井研县| 临清市| 隆昌县| 香港 | 定南县| 大洼县| 福泉市| 罗城| 通化县| 潜山县| 临清市| 柘城县| 通海县| 镇远县| 墨竹工卡县| 阿鲁科尔沁旗| 南昌市| 库伦旗| 高台县| 高清| 色达县| 当阳市|