<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    博學而篤志,好問而近思

    關于JSF及其運行機制[轉載]

    ????????????????????????????????????關于JSF及其運行機制

    1概述:

    ??? JSF(Java Server Faces)是基于MVC模式的新一代web framework,是一套JCP支持的新一代web開發規范,各個廠商可以定義自己的JSF實現,使開發更加容易.

    JSF具有一下優點: (1)基于MVC,可以有效的將數據顯示與業務邏輯分開處理.(2)有功能強大豐富的web開發組件,可以可視化的設計開發web應用程序.(3)事件驅動,這是JSF比較重要的特點,這種機制大大減少了開發時間,提高了開發效率.


    2.
    配置

    ??? JSF是一個標準的web framework,是以Servlet為調度核心,因此,如果想正常運行JSF程序,必須把JSF作為servlet來運行,后綴名為:.faces,示例代碼如下(web.xml):

    ??? 也需要把JSF的幾個庫文件(jsf-*.jar)放到web應用程序的lib.

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

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

    這里提一下,JSF最主要的特性之一,事件驅動,就是通過html組件來體現的,在定義了一個按鈕(commandButton)以后,只要定義一下它的action,就可以直接的將這個動作映射到后臺的某個managed-bean的某個方法上,這樣,大大減少了原來中間層的javascript調用,也就縮短了開發時間,并且,也減少了中間出錯的幾率.

    ?

    3.最簡單的例子

    ??? 想迅速了解JSF的運行機制以及使用JSF,我試著做一個最簡單的例子,來觀察JSF的運行.例子的基本想法是:兩個基本的jsp頁面(基于JSF,也就是說,要引入JSFtag lib),一個后臺的Bean,Bean中有一個示例的可以調用的方法.在第一個頁面中,有一個按鈕,將按鈕的action對應到Bean中的方法(通過faces-config.xmlmanaged-bean來定義),這樣,當點擊按鈕的時候,調用該方法,并且,頁面跳轉到第二個web頁面(通過faces-config.xmlnavigation-rule來定義).

    ??? 通過一番緊張的配置,寫代碼,查錯,改錯……,例子終于可以正確運行,達到了我想預期的目標,具體各個文件可能如下:

    faces-config.xml

    兩個jsp頁面分別為userList.jspuserDetail.jsp,上面的配置文件意思就是說,當我調用到”addUser”action的時候,頁面就跳轉到userDetail.jsp.定義的demoDemoBean的實例,是由JSF來初始化,web頁面中直接調用即可.

    userList.jsp

    ??? 這個文件中,會有這樣一塊兒代碼:

    ??? <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頁面需要的最基本的view,html-form和一個command button,通過點擊這個command button 來調用后臺的demo.addUser方法,來實現真正的業務邏輯.這個過程中,我么不必考慮JSF是如何把這個demo.addUser對應到后臺的方法上的,只要寫這樣對應寫,就可以了.

    ??? userDetail.jsp

    ??? 如果寫都可以了.這個例子中,userDetail.jsp只是一個流轉點.

    ??? DemoBean.java

    ??? 注意:這里該方法要定義為String類型,返回的字符串就是在faces-config.xml中定義的navigation-rule -> navigation-case - > from-outcome,JSF也就是通過這個來找到userDetail.jsp頁面進行調度的.

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

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

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

    評論

    # re: 關于JSF及其運行機制[轉載] 2006-10-24 10:11 蘿卜青菜

    講的似乎是自定義標簽,學習一下,大家互相學習進步!  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2006年10月>
    24252627282930
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    常用鏈接

    留言簿(14)

    隨筆檔案

    BlogJava的幫助

    朋友的博客

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    快樂工作—享受生活
    主站蜘蛛池模板: 亚洲婷婷五月综合狠狠爱| 国产亚洲情侣一区二区无| 亚洲综合图片小说区热久久| 中文精品人人永久免费| 亚洲精品网站在线观看不卡无广告| 亚洲精品久久无码av片俺去也| 无码一区二区三区免费视频| 精品亚洲AV无码一区二区三区 | 最新亚洲成av人免费看| 曰批免费视频播放在线看片二| 在线观看永久免费视频网站| 怡红院亚洲红怡院在线观看| 亚洲国产成人爱av在线播放| 精品一区二区三区免费观看| 国产AV无码专区亚洲Av| 99xxoo视频在线永久免费观看| 亚洲国产高清美女在线观看| 野花高清在线电影观看免费视频 | 亚洲国产精品无码AAA片| 久久国产精品萌白酱免费| 久久久久亚洲AV无码网站| 男女做羞羞的事视频免费观看无遮挡| 亚洲一级免费毛片| 热99re久久免费视精品频软件| 国产成人亚洲精品蜜芽影院| 在线精品亚洲一区二区小说| 日韩精品人妻系列无码专区免费 | 99精品视频免费观看| 亚洲黄色激情视频| 国产成人aaa在线视频免费观看 | 亚洲欧洲日产国产最新| 国产精品美女午夜爽爽爽免费| 亚洲s码欧洲m码吹潮| 亚洲熟妇无码乱子AV电影| 最近2019年免费中文字幕高清| 最新亚洲精品国偷自产在线| 久久久精品国产亚洲成人满18免费网站 | 国产成人免费手机在线观看视频 | 亚洲综合久久夜AV | 人妻无码一区二区三区免费| 亚洲av无码一区二区三区天堂|