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

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

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

    隨筆-112  評(píng)論-73  文章-0  trackbacks-0

     JSF2中輕松使用ajax 

    http://blog.csdn.net/thinkhlin_down/archive/2010/04/15/5488370.aspx

    1:使用JSF2提供的ajax的理由

           js兼容性:寫(xiě)過(guò)web應(yīng)用的朋友都知道,js在各個(gè)瀏覽器中的不兼容是出了名的,在IE上運(yùn)行好好的放到firefox下可能沒(méi)法正常運(yùn)行,或者相反的情況在firefox下正常運(yùn)行的代碼在IE上無(wú)法運(yùn)行,甚至在IE6下能正常運(yùn)行的代碼在IE8里面不能正常運(yùn)行,但是JSF2.0中將所有的不一致都隱藏起來(lái)了,開(kāi)發(fā)者或者使用者無(wú)需關(guān)心這些惱人的問(wèn)題。

           ajax框架的選擇:當(dāng)前有許多流行的ajax框架,如jquery,json,dwr等等,但是這些都必須額外添加支持庫(kù)而且有些必須進(jìn)行繁雜的配置,對(duì)于注重應(yīng)用的開(kāi)發(fā)人員來(lái)說(shuō)很不利(別說(shuō)用那些很多配置的顯示你很高手,那都是自我安慰的一種方式,誰(shuí)不喜歡簡(jiǎn)單的事情!難不成你用這些理由跟你們老板理論去,那你就等著卷鋪蓋走人吧?。?,而JSF2是內(nèi)置了ajax功能,能滿(mǎn)足我們絕大部分的需求,所以可以大大的簡(jiǎn)化和加速我們項(xiàng)目的進(jìn)度。

    2:最簡(jiǎn)單的ajax功能

           如今流行的ajax框架非常多,比如jquery,dwr等之類(lèi)的,但是這些ajax框架(或類(lèi)似腳本庫(kù))都是單獨(dú)提供的,而且使用起來(lái)還是相對(duì)麻煩,而JSF2提供的ajax功能實(shí)現(xiàn)非常簡(jiǎn)單,甚至一句js代碼都不用寫(xiě)就可以完成頁(yè)面的無(wú)刷新功能。

    以下是一個(gè)非常簡(jiǎn)單的一個(gè)使用JSF2標(biāo)簽并帶有ajax功能的代碼

    <h:commandButton action="#{testAjax.validateUser}">

           <f:ajax render="id1">

    </h:commandButton>

    我們?cè)谏厦娴睦又胁](méi)有看到任何的js代碼,其實(shí)JSF2標(biāo)簽幫我們封裝好了所有的操作,在生成頁(yè)面的時(shí)候會(huì)進(jìn)行相應(yīng)的處理,具體的屬性介紹我們下面的內(nèi)容會(huì)詳細(xì)講解。

    3:以上的例子只是一個(gè)非常簡(jiǎn)單的功能,能完成一些基本的ajax功能,我們現(xiàn)在編寫(xiě)一個(gè)相對(duì)完全一點(diǎn)的示例:

    <h:commandButton action="#{testAjax.validateUser}">

           <f:ajax render="id1 id2" execute="id3 id4" event="blur" onevent="showFire" />

    </h:commandButton>

    屬性說(shuō)明:

    屬性名稱(chēng)

    屬性說(shuō)明

    render

    頁(yè)面上需要刷新的元素的id,如果有多個(gè)可以用空格隔開(kāi),示例中就是有id1 id2,中間使用空格隔開(kāi),前提是我們的元素必須要有一個(gè)id屬性,比如一個(gè)輸入框<input type="text" id="id1" value=""/>

    execute

    需要提交給服務(wù)器端的參數(shù)的id,如果有多個(gè)用空格隔開(kāi),比如說(shuō)更新id1時(shí),需要傳入一個(gè)輸入框idid3的元素,那么可以用execute="id3",其實(shí)還可以使用@符號(hào)來(lái)操作,有@this表示當(dāng)前元素;@form表示此元素所在表單(form)下的所有的元素;@none表示不提交任何元素;@all表示提交頁(yè)面所有JSF的可提交的元素。

    event

    ajax事件觸發(fā)的條件,比如我們上一例子就是使用了event="blur",表示當(dāng)blur事件發(fā)生時(shí)觸發(fā)ajax事件(blur只是舉例,可以使用的有action, blur, change, click, dblclick, focus, keydown, keypress, keyup, mousedown, mousemove, mouseout, mouseover, mouseup, select),如果沒(méi)有指定則使用默認(rèn)的事件觸發(fā),默認(rèn)的事件是actionaction其實(shí)不是js中有的事件,是指任何方式觸發(fā)調(diào)用,如點(diǎn)擊也能觸發(fā)action事件。

    onevent

    ajax事件相應(yīng)完成后執(zhí)行的js函數(shù),比如說(shuō)我們上面示例代碼有onevent="showFire",這個(gè)函數(shù)帶可以帶至多一個(gè)參數(shù),這個(gè)參數(shù)是ajax時(shí)間觸發(fā)后返回的結(jié)果DOM對(duì)象(并不是我們調(diào)用java代碼中的方法返回的參數(shù)),在ajax事件響應(yīng)完成后即調(diào)用showFire這個(gè)函數(shù),示例如下代碼

    <script type="text/javascript">

           function showFire() {

                  alert("回調(diào)函數(shù)事件已經(jīng)觸發(fā)");

           }

    </script>

    <h:form>

           <h:outputText id="id1" value="#{ajaxTest.number}"/>

           <h:commandButton value="數(shù)字增加" action="#{testAjax.count}">

                  <f:ajax render="number" onevent="showFire"/>

           </h:commandButton>

    </h:form>

    ...

    Java代碼

    ...

    @ManagedBean

    @ViewScoped

    public class AjaxTest implements Serializable {

       

        private int number;

        public void count() {

            number++;

        }

           //getter and setter

           ...

    }

    listener

    此屬性是指ajax事件觸發(fā)后調(diào)用的managedbean的方法,其實(shí)作用很明顯,比如說(shuō)我們這里不用按鈕之類(lèi)的標(biāo)簽,只是需要當(dāng)我們輸入某個(gè)數(shù)據(jù)的時(shí)候觸發(fā)一個(gè)ajax事件,這個(gè)屬性就顯得很重要了。示例如下:

    JSF頁(yè)面代碼

    ...

        <h:head>

            <title>JSF2.0 ajax測(cè)試</title>

            <script type="text/javascript">

                var temp = 0;

                function showFire() {

                    alert("響應(yīng)函數(shù)!");

                }

            </script>

        </h:head>

        <h:body>

            <h:form>

                <h:outputText id="id1" value="#{ajaxTest.number}"/>

                <h:inputText>

                    <f:ajax render="id1" event="keyup" onevent="showFire" listener="#{ajaxTest.count}"/>

                </h:inputText>

            </h:form>

        </h:body>

    ...

    Java代碼

    ...

    @ManagedBean

    @ViewScoped

    public class AjaxTest implements Serializable {

       

        private int number;

        public void count() {

            number++;

        }

           //getter and setter

           ...

    }

    listener屬性的代碼作用就是調(diào)用AjaxTest類(lèi)中的count方法,使數(shù)字加一,我們也可以延伸一下作用,比如說(shuō)注冊(cè)信息的時(shí)候,輸入的用戶(hù)名檢查是否重復(fù),當(dāng)我們輸入的時(shí)候就實(shí)時(shí)檢測(cè)即可。

    注:此回調(diào)函數(shù)showFire會(huì)被執(zhí)行三次,但是通過(guò)監(jiān)控軟件ajax事件觸發(fā)后只提交了一次數(shù)據(jù)請(qǐng)求,所以具體的問(wèn)題出現(xiàn)在客戶(hù)端,由于資料相對(duì)較少暫時(shí)不做解釋。

    posted on 2010-05-05 20:10 Libo 閱讀(1385) 評(píng)論(3)  編輯  收藏 所屬分類(lèi): JSF 2

    評(píng)論:
    # re: 轉(zhuǎn): JSF2中輕松使用ajax 2011-08-09 23:36 | FreeDove
    請(qǐng)教一下,那么上面的例子中,listener和action似乎沒(méi)什么區(qū)別吧?另外過(guò)了1年了,資料多了,解析一下文章末尾哈~~~  回復(fù)  更多評(píng)論
      
    # re: 轉(zhuǎn): JSF2中輕松使用ajax 2011-08-22 10:53 | Libo
    @FreeDove
    沒(méi)有什么區(qū)別

    現(xiàn)在主要使用primefaces.很不錯(cuò)的組件。
      回復(fù)  更多評(píng)論
      
    # re: 轉(zhuǎn): JSF2中輕松使用ajax 2013-05-25 17:01 | 杜澤昭
    請(qǐng)問(wèn)什么情況下onevent所掉函數(shù)只執(zhí)行兩次?我這邊出現(xiàn)了會(huì)掉函數(shù)參數(shù)只有begin;complete沒(méi)success  回復(fù)  更多評(píng)論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: a在线视频免费观看在线视频三区| 精品在线免费观看| 亚洲中文无码mv| 亚洲欧洲日韩极速播放| 亚洲国产美女精品久久| 亚洲人成人77777在线播放| 亚洲最大中文字幕| 亚洲午夜国产精品无卡| 亚洲成_人网站图片| 亚洲欧洲无码AV不卡在线| 亚洲欧美国产国产一区二区三区| 亚洲色欲色欱wwW在线| 亚洲欧美国产国产一区二区三区| 亚洲国产AV一区二区三区四区 | 国产真人无码作爱免费视频| 黄色短视频免费看| 亚洲色精品三区二区一区| 亚洲欧洲无码AV不卡在线| 国产精品亚洲综合一区在线观看| 亚洲制服在线观看| 亚洲 日韩经典 中文字幕| 久久水蜜桃亚洲AV无码精品 | 亚洲精选在线观看| 亚洲五月午夜免费在线视频| 久久亚洲中文字幕精品一区四| 亚洲啪啪AV无码片| 亚洲精品天天影视综合网| 亚洲国产精品成人综合久久久 | 亚洲第一精品在线视频| 亚洲国产成人久久综合一区| 亚洲成av人无码亚洲成av人| 免费一级毛suv好看的国产网站| 中文字幕不卡免费高清视频| 6080午夜一级毛片免费看| 四虎www免费人成| 亚洲日韩中文在线精品第一| 久久亚洲免费视频| 国产精品亚洲综合久久| 亚洲免费在线观看| 最近免费中文字幕大全高清大全1| 免费91最新地址永久入口|