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

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

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

    Nomad & His Life

    博觀而約取,厚積而薄發(fā)
    posts - 15, comments - 88, trackbacks - 0, articles - 0
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    選DWR,還是A4J,這是一個(gè)問(wèn)題

    Posted on 2006-08-10 08:58 Nomad 閱讀(3587) 評(píng)論(14)  編輯  收藏 所屬分類: Java
    原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明作者:Nomad,出處: www.jialing.net

    ??? 在網(wǎng)上找了一圈Ajax的Java框架,感覺(jué)不錯(cuò)的只有兩個(gè),一個(gè)是被提到比較多的DWR(Direct Web Remoting),另一個(gè)是剛剛1.0的Ajax4JSF。本文先用代碼說(shuō)話,各用兩個(gè)框架開(kāi)發(fā)同樣功能的Ajax輸入驗(yàn)證的小程序。在最后表達(dá)一下鄙人對(duì)這兩個(gè)框架的淺見(jiàn)。

    ·程序功能

    ??? 頁(yè)面上有兩個(gè)輸入框,一個(gè)填用戶名,一個(gè)填密碼。兩個(gè)框空著時(shí)提示“請(qǐng)?zhí)顚?xiě)”;用戶名字符長(zhǎng)度小于3時(shí)提示“長(zhǎng)度應(yīng)大于3”;當(dāng)用戶名是“root”,密碼是“123”時(shí)提示密碼正確,否則提示密碼錯(cuò)誤。

    ·DWR的實(shí)現(xiàn)
    ??? Java邏輯: 這是提供給頁(yè)面異步調(diào)用的Java代碼

    ?1?package?net.jialing;
    ?2?
    ?3?public?class?ValidateBean?{
    ?4?
    ?5?????public?String?checkName(String?name)?{
    ?6?????????if(name?==?null?||?name.equals(""))?return?"請(qǐng)?zhí)钊胗脩裘?/span>";
    ?7?????????
    ?8?????????if(name.length()<3)?return?"用戶名長(zhǎng)度須大于3";
    ?9?????????
    10?????????return?"";
    11?????}
    12?
    13?????public?String?checkPwd(String?name,String?password)?{
    14?????????if(password?==?null?||?password.equals(""))?return?"請(qǐng)?zhí)钊朊艽a";
    15?????????
    16?????????if(name?!=?null?&&?password?!=?null)?{
    17?????????????if(name.equals("root")?&&?password.equals("123"))
    18?????????????????return?"密碼正確!";
    19?????????????else
    20?????????????????return?"密碼不正確!";
    21?????????}
    22?????????
    23?????????return?"";
    24?????}
    25?
    26?}



    ??? DWR的配置:

    <dwr>
    ??
    <allow>
    ????
    <create?creator="new"?javascript="JValidate">
    ????????
    <param?name="class"?value="net.jialing.ValidateBean"/>
    ????
    </create>
    ??
    </allow>
    </dwr>



    ??? JSP頁(yè)面:在頁(yè)面中寫(xiě)了四個(gè)函數(shù)來(lái)調(diào)用各自的Java驗(yàn)證代碼。

    <%@?page?contentType="text/html;?charset=gb2312"?language="java"?errorPage=""?%>
    <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta?http-equiv="Content-Type"?content="text/html;?charset=gb2312">
    <title>Struts?+?DWR?AJAX?Validation</title>
    <script?type='text/javascript'?src='dwr/engine.js'></script>
    <script?type='text/javascript'?src='dwr/util.js'></script>
    <script?type='text/javascript'?src='dwr/interface/JValidate.js'></script>
    <script>
    function?changeName()?{
    ????
    var?name?=?document.getElementById("name").value;
    ????JValidate.checkName(name,validateName);
    }

    function?validateName(data)?{
    ????document.getElementById(
    "name_message").innerHTML?=?data;
    }

    function?changePwd()?{
    ????
    var?name?=?document.getElementById("name").value;
    ????
    var?pwd?=?document.getElementById("password").value;
    ????JValidate.checkPwd(name,pwd,validatePwd);
    }

    function?validatePwd(data)?{
    ????document.getElementById(
    "password_message").innerHTML?=?data;
    }
    </script>
    </head>
    <body>
    Struts?+?DWR?AJAX?Validation:?
    <br>
    Name:
    <input?name="name"?type="text"?id="name"?onkeyup="changeName()">?<label?id="name_message"></label><br>
    Password:
    <input?name="password"?type="password"?id="password"?onkeyup="changePwd()">?<label?id=?password_message"></label>
    </body>
    </html>

    ?? ?

    ·A4J的實(shí)現(xiàn)

    ??? Java邏輯:這是JSF控制下的JavaBean

    package?net.jialing;

    public?class?ValidateBean?{
    ????
    private?String?name;

    ????
    private?String?password;

    ????
    private?String?name_message;

    ????
    private?String?password_message;

    ????
    public?String?getName()?{
    ????????
    return?name;
    ????}

    ????
    public?void?setName(String?name)?{
    ????????
    this.name?=?name;
    ????}

    ????
    public?String?getName_message()?{
    ????????
    if(name?==?null?||?name.equals(""))?return?"請(qǐng)?zhí)钊胗脩裘?/span>";
    ????????
    ????????
    if(name.length()<3)?return?"用戶名長(zhǎng)度須大于3";
    ????????
    ????????
    return?"";
    ????}

    ????
    public?void?setName_message(String?name_message)?{
    ????????
    this.name_message?=?name_message;
    ????}

    ????
    public?String?getPassword()?{
    ????????
    return?password;
    ????}

    ????
    public?void?setPassword(String?password)?{
    ????????
    this.password?=?password;
    ????}

    ????
    public?String?getPassword_message()?{
    ????????
    if(password?==?null?||?password.equals(""))?return?"請(qǐng)?zhí)钊朊艽a";
    ????????
    ????????
    if(name?!=?null?&&?password?!=?null)?{
    ????????????
    if(name.equals("root")?&&?password.equals("123"))
    ????????????????
    return?"密碼正確!";
    ????????????
    else
    ????????????????
    return?"密碼不正確!";
    ????????}
    ????????
    ????????
    return?"";
    ????}

    ????
    public?void?setPassword_message(String?password_message)?{
    ????????
    this.password_message?=?password_message;
    ????}

    }



    ??? JSF的配置:

    <faces-config>
    <managed-bean>
    ????????
    <managed-bean-name>validate</managed-bean-name>
    ????????
    <managed-bean-class>
    ????????????net.jialing.ValidateBean
    ????????
    </managed-bean-class>
    ????????
    <managed-bean-scope>request</managed-bean-scope>
    ????????
    <managed-property>
    ????????????
    <property-name>name</property-name>
    ????????????
    <null-value/>
    ????????
    </managed-property>
    ????????
    <managed-property>
    ????????????
    <property-name>password</property-name>
    ????????????
    <null-value/>
    ????????
    </managed-property>
    ????????
    <managed-property>
    ????????????
    <property-name>name_message</property-name>
    ????????????
    <null-value/>
    ????????
    </managed-property>
    ????????
    <managed-property>
    ????????????
    <property-name>password_message</property-name>
    ????????????
    <null-value/>
    ????????
    </managed-property>
    </managed-bean>
    </faces-config>



    ??? JSP頁(yè)面:

    <%@?page?language="java"?pageEncoding="ISO-8859-1"%>
    <%@?taglib?uri="https://ajax4jsf.dev.java.net/ajax"?prefix="a4j"%>
    <%@?taglib?uri="http://java.sun.com/jsf/html"?prefix="h"?%>
    <%@?taglib?uri="http://java.sun.com/jsf/core"?prefix="f"?%>

    <!DOCTYPE?HTML?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN">
    <html>
    <head>
    ????
    <title>Ajax4JSF?Validate?Page</title>
    </head>
    <body>
    ????
    <f:view>
    ????????This?is?my?Ajax4JSF?Validate?page.?
    <br>
    ????????
    <h:form>
    ????????????Name:
    <h:inputText?id="name"?value="#{validate.name}"?>
    ????????
    <a4j:support?event="onkeyup"?reRender="rename"?/>
    ????????
    </h:inputText>?<h:outputText?id="rename"?value="#{validate.name_message}"?/><br>
    ????????
    ????????????Password:
    <h:inputSecret?id="password"?value="#{validate.password}"?>
    ????????
    <a4j:support?event="onkeyup"?reRender="repwd"?/>
    ??????????
    </h:inputSecret>?<h:outputText?id="repwd"?value="#{validate.password_message}"?/>
    ????????
    </h:form>
    ????
    </f:view>
    </body>
    </html>



    ·對(duì)比


    1.代碼量
    ??? 這是程序員最關(guān)心問(wèn)題,哪個(gè)框架能減輕我們更多的負(fù)擔(dān)呢。首先看Java代碼,DWR似乎比A4J少一點(diǎn),其實(shí)不然,因?yàn)锳4J是基于JSF的Managed Bean上開(kāi)發(fā)的,所以Bean里的其它代碼都可以用到JSF其它的地方,所以Java的開(kāi)發(fā)量是相同的。其次看配置量,A4J稍有一些優(yōu)勢(shì),只要在JSF中配置了就不用在配置,而DWR還需要再配置一個(gè)XML文件。最后看頁(yè)面的代碼量,這一點(diǎn)A4J的優(yōu)勢(shì)更加明顯,程序員完全不用寫(xiě)JavaScript代碼,只需將要異步刷新的地方加入a4j的標(biāo)簽即可。
    ??? 總的來(lái)說(shuō),在節(jié)省代碼量這個(gè)方面A4J是勝利的。

    2.靈活性
    ??? 這一點(diǎn)DWR是明顯的贏家,DWR適合各種框架,在設(shè)計(jì)時(shí)都考慮到了如Spring、JSF、Struts等的集成。而A4J僅適合JSF框架,對(duì)應(yīng)用范圍做了很大的限制。在集成方面不僅僅是Java框架,還有現(xiàn)在越來(lái)越流行的JavaScript框架(如Dojo、Qooxdoo等),因?yàn)锳4J封裝了JavaScript代碼,開(kāi)發(fā)者無(wú)法像DWR一樣可以自由的使用JavaScript。當(dāng)開(kāi)發(fā)者習(xí)慣于將一些邏輯寫(xiě)在JavaScipt中時(shí),使用A4J可能會(huì)造成很多的不便。

    3.風(fēng)險(xiǎn)性
    ??? A4J以標(biāo)簽為開(kāi)發(fā)手段,減去了應(yīng)用程序開(kāi)發(fā)者在JavaScript和DHTML等方面開(kāi)發(fā)的時(shí)間,但同時(shí)也可能埋下風(fēng)險(xiǎn)的隱患。在開(kāi)發(fā)一個(gè)Web應(yīng)用的時(shí)候,開(kāi)發(fā)者需要全面的評(píng)估應(yīng)用中會(huì)使用到的技術(shù)功能,確定利用A4J可以實(shí)現(xiàn),畢竟這是一個(gè)新成長(zhǎng)起來(lái)的框架,需要更加留意。另外在安全方面,兩個(gè)框架都還無(wú)從考證。

    4.前景
    ??? DWR在2.0里實(shí)現(xiàn)了Ajax的反轉(zhuǎn),即在Java中執(zhí)行JavaScript代碼,似乎標(biāo)志著一種新的開(kāi)發(fā)方式。A4J則搭上了JSF這趟快車,各個(gè)大公司都在謀劃著將應(yīng)用開(kāi)發(fā)進(jìn)一步的分工,上游廠商制定組件,下游的公司使用組件為企業(yè)提供服務(wù),JSF是它們賺錢的一個(gè)好工具,一定會(huì)繼續(xù)推而廣之,而A4J也會(huì)隨著JSF的成長(zhǎng)而成長(zhǎng)。


    ·總結(jié)
    ??? 也許還不到總結(jié)的時(shí)候。我想用DWR還是A4J,可以參考究竟使用Struts還是JSF,DWR的靈活性和Struts是對(duì)應(yīng)的,兩者結(jié)合可以開(kāi)發(fā)出靈活性很高的程序。A4J則肯定和JSF搭配,JSF的組件樹(shù)也可以讓開(kāi)發(fā)的速度加快。


    ·參考
    DWR:http://getahead.ltd.uk/dwr
    Ajax4jsf: https://ajax4jsf.dev.java.net/

    ·示例下載
    基于DWR的示例:http://www.jialing.net/download/ajax/Struts_DWR_Validate.rar
    基于A4J的示例:http://www.jialing.net/download/ajax/A4J_Validate.rar

    評(píng)論

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-10 19:31 by 坎井之蛙
    呵呵 不錯(cuò)不錯(cuò) 學(xué)習(xí) 仰慕中。。。。,從你這可以學(xué)到許多想要的,3Q

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-10 20:53 by dfjinn
    問(wèn)一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-10 22:40 by 一農(nóng)
    還有json-rpc-java

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-10 23:41 by 龍卷風(fēng)驛站
    lz,dwr只用來(lái)做這些事情就太大才小用了,如果只是驗(yàn)證這些簡(jiǎn)單,沒(méi)必要這么搞


    還是結(jié)合spring和hibernate來(lái)發(fā)揮dwr的最大功能

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-11 01:25 by 楊一
    很多觀點(diǎn)我并不贊成,然而作者的筆觸很專業(yè)

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-11 08:36 by Nomad
    @dfjinn

    #問(wèn)一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

    JValidate是DWR中自動(dòng)生成的對(duì)ValidateBean的映射,用來(lái)執(zhí)行ValidateBean的邏輯。
    見(jiàn):<create creator="new" javascript="JValidate">
    <param name="class" value="net.jialing.ValidateBean"/>
    </create>

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-08-12 10:35 by 火線生存
    感謝!

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2006-09-25 22:59 by 有貓相伴的日子
    不贊成可以討論,我覺(jué)得樓主寫(xiě)得挺可以,他是他的想法,只是把自己的想法寫(xiě)出來(lái)?。。。。。。。。。。。。。。。。?!
    DWR 的靈活靈是無(wú)可否認(rèn)的,DWR還有很多優(yōu)點(diǎn)是其它AJAX框架所不具有的

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2007-05-29 16:18 by liang
    用dwr 一般不和jsf結(jié)全在一起,但與spring結(jié)合在一起
    jsf +spring
    + hibernate
    dwr+spring

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2007-05-29 16:20 by liang
    唉上面怎么成那個(gè)樣子呀,
    dwr + jsf + spring + hibernate 我一般不把dwr與jsf結(jié)合,而是dwr與spring, jsf與spring,就是這個(gè)樣子。

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2008-08-25 09:29 by libaiyu
    dwr是非常得靈活的,在你的項(xiàng)目中可全部用,也可之在某部分用的都沒(méi)問(wèn)題,還有就是使用暴露的方式非常好,想用哪個(gè)就暴露哪個(gè),這就很好了。對(duì)dwr是很有信心的,ajax實(shí)現(xiàn)必然會(huì)出現(xiàn)一個(gè)進(jìn)化,而dwr模式將是一個(gè)很有希望的方向。對(duì)dwr也有些研究,若大家有什么問(wèn)題一塊討論。qq:94168424

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2008-08-25 09:35 by libaiyu
    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題 回復(fù) 更多評(píng)論
    2006-08-11 08:36 by Nomad
    @dfjinn

    #問(wèn)一下,/interface/JValidate.js,這個(gè)JS在哪里啊?找不到.

    JValidate是DWR中自動(dòng)生成的對(duì)ValidateBean的映射,用來(lái)執(zhí)行ValidateBean的邏輯。
    見(jiàn):<create creator="new" javascript="JValidate">
    <param name="class" value="net.jialing.ValidateBean"/>
    </create>


    在項(xiàng)目中是找不到的,但可以使用在火狐中使用插件firebug來(lái)調(diào)試可查看,這個(gè)文件就是暴露的java類的js形式,你用firebug將很容易讀取到頁(yè)面中使用的所有js文件,firebug怎么用我在這就不多說(shuō)了,在firebug主頁(yè)上都講的很好了

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2008-10-29 14:59 by
    不錯(cuò),正是我想要的東西。。。

    # re: 選DWR,還是A4J,這是一個(gè)問(wèn)題  回復(fù)  更多評(píng)論   

    2013-01-24 23:04 by Super9527
    謝謝了,樓主,解了我疑惑
    主站蜘蛛池模板: 人体大胆做受免费视频| 亚洲综合最新无码专区| 4hu四虎最新免费地址| 两个人看的www视频免费完整版| 亚洲码一区二区三区| 亚洲精品美女久久久久99| 亚洲国产成人久久一区WWW| 免费看美女被靠到爽| 无码av免费毛片一区二区| 亚洲免费视频在线观看| 中文字幕无码一区二区免费| 日本激情猛烈在线看免费观看| 亚洲AV无码AV日韩AV网站| 丁香婷婷亚洲六月综合色| 亚洲国产精品张柏芝在线观看| 亚洲黄色在线观看视频| 亚洲电影国产一区| 亚洲AV日韩AV天堂一区二区三区| 亚洲日韩精品一区二区三区无码| 亚洲阿v天堂在线2017免费| 免费又黄又硬又爽大片| 四虎AV永久在线精品免费观看| 国产精品久久香蕉免费播放| 国产精品高清全国免费观看| 免费看小12萝裸体视频国产 | 免费在线一级毛片| 免费看国产一级特黄aa大片| 四虎永久免费网站免费观看| 婷婷亚洲天堂影院| 怡红院亚洲怡红院首页| 亚洲日韩激情无码一区| 久久久久久久久亚洲| 亚洲国产一区在线| 亚洲精品国产福利在线观看| 亚洲免费观看网站| 亚洲字幕AV一区二区三区四区| 亚洲另类无码专区首页| 九九久久精品国产免费看小说| 国产裸体美女永久免费无遮挡| 中文字幕久精品免费视频| aa在线免费观看|