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

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

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

    Nomad & His Life

    博觀而約取,厚積而薄發
    posts - 15, comments - 88, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    選DWR,還是A4J,這是一個問題

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

    ??? 在網上找了一圈Ajax的Java框架,感覺不錯的只有兩個,一個是被提到比較多的DWR(Direct Web Remoting),另一個是剛剛1.0的Ajax4JSF。本文先用代碼說話,各用兩個框架開發同樣功能的Ajax輸入驗證的小程序。在最后表達一下鄙人對這兩個框架的淺見。

    ·程序功能

    ??? 頁面上有兩個輸入框,一個填用戶名,一個填密碼。兩個框空著時提示“請填寫”;用戶名字符長度小于3時提示“長度應大于3”;當用戶名是“root”,密碼是“123”時提示密碼正確,否則提示密碼錯誤。

    ·DWR的實現
    ??? Java邏輯: 這是提供給頁面異步調用的Java代碼

    ?1?package?net.jialing;
    ?2?
    ?3?public?class?ValidateBean?{
    ?4?
    ?5?????public?String?checkName(String?name)?{
    ?6?????????if(name?==?null?||?name.equals(""))?return?"請填入用戶名";
    ?7?????????
    ?8?????????if(name.length()<3)?return?"用戶名長度須大于3";
    ?9?????????
    10?????????return?"";
    11?????}
    12?
    13?????public?String?checkPwd(String?name,String?password)?{
    14?????????if(password?==?null?||?password.equals(""))?return?"請填入密碼";
    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頁面:在頁面中寫了四個函數來調用各自的Java驗證代碼。

    <%@?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的實現

    ??? 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?"請填入用戶名";
    ????????
    ????????
    if(name.length()<3)?return?"用戶名長度須大于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?"請填入密碼";
    ????????
    ????????
    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頁面:

    <%@?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>



    ·對比


    1.代碼量
    ??? 這是程序員最關心問題,哪個框架能減輕我們更多的負擔呢。首先看Java代碼,DWR似乎比A4J少一點,其實不然,因為A4J是基于JSF的Managed Bean上開發的,所以Bean里的其它代碼都可以用到JSF其它的地方,所以Java的開發量是相同的。其次看配置量,A4J稍有一些優勢,只要在JSF中配置了就不用在配置,而DWR還需要再配置一個XML文件。最后看頁面的代碼量,這一點A4J的優勢更加明顯,程序員完全不用寫JavaScript代碼,只需將要異步刷新的地方加入a4j的標簽即可。
    ??? 總的來說,在節省代碼量這個方面A4J是勝利的。

    2.靈活性
    ??? 這一點DWR是明顯的贏家,DWR適合各種框架,在設計時都考慮到了如Spring、JSF、Struts等的集成。而A4J僅適合JSF框架,對應用范圍做了很大的限制。在集成方面不僅僅是Java框架,還有現在越來越流行的JavaScript框架(如Dojo、Qooxdoo等),因為A4J封裝了JavaScript代碼,開發者無法像DWR一樣可以自由的使用JavaScript。當開發者習慣于將一些邏輯寫在JavaScipt中時,使用A4J可能會造成很多的不便。

    3.風險性
    ??? A4J以標簽為開發手段,減去了應用程序開發者在JavaScript和DHTML等方面開發的時間,但同時也可能埋下風險的隱患。在開發一個Web應用的時候,開發者需要全面的評估應用中會使用到的技術功能,確定利用A4J可以實現,畢竟這是一個新成長起來的框架,需要更加留意。另外在安全方面,兩個框架都還無從考證。

    4.前景
    ??? DWR在2.0里實現了Ajax的反轉,即在Java中執行JavaScript代碼,似乎標志著一種新的開發方式。A4J則搭上了JSF這趟快車,各個大公司都在謀劃著將應用開發進一步的分工,上游廠商制定組件,下游的公司使用組件為企業提供服務,JSF是它們賺錢的一個好工具,一定會繼續推而廣之,而A4J也會隨著JSF的成長而成長。


    ·總結
    ??? 也許還不到總結的時候。我想用DWR還是A4J,可以參考究竟使用Struts還是JSF,DWR的靈活性和Struts是對應的,兩者結合可以開發出靈活性很高的程序。A4J則肯定和JSF搭配,JSF的組件樹也可以讓開發的速度加快。


    ·參考
    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

    評論

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

    2006-08-10 22:40 by 一農
    還有json-rpc-java

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

    2006-08-10 23:41 by 龍卷風驛站
    lz,dwr只用來做這些事情就太大才小用了,如果只是驗證這些簡單,沒必要這么搞


    還是結合spring和hibernate來發揮dwr的最大功能

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    #問一下,/interface/JValidate.js,這個JS在哪里啊?找不到.

    JValidate是DWR中自動生成的對ValidateBean的映射,用來執行ValidateBean的邏輯。
    見:<create creator="new" javascript="JValidate">
    <param name="class" value="net.jialing.ValidateBean"/>
    </create>

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

    2006-09-25 22:59 by 有貓相伴的日子
    不贊成可以討論,我覺得樓主寫得挺可以,他是他的想法,只是把自己的想法寫出來!!!!!!!!!!!!!!!!!!
    DWR 的靈活靈是無可否認的,DWR還有很多優點是其它AJAX框架所不具有的

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

    2008-08-25 09:35 by libaiyu
    # re: 選DWR,還是A4J,這是一個問題 回復 更多評論
    2006-08-11 08:36 by Nomad
    @dfjinn

    #問一下,/interface/JValidate.js,這個JS在哪里啊?找不到.

    JValidate是DWR中自動生成的對ValidateBean的映射,用來執行ValidateBean的邏輯。
    見:<create creator="new" javascript="JValidate">
    <param name="class" value="net.jialing.ValidateBean"/>
    </create>


    在項目中是找不到的,但可以使用在火狐中使用插件firebug來調試可查看,這個文件就是暴露的java類的js形式,你用firebug將很容易讀取到頁面中使用的所有js文件,firebug怎么用我在這就不多說了,在firebug主頁上都講的很好了

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

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

    # re: 選DWR,還是A4J,這是一個問題  回復  更多評論   

    2013-01-24 23:04 by Super9527
    謝謝了,樓主,解了我疑惑
    主站蜘蛛池模板: 午夜亚洲www湿好大| 香蕉视频亚洲一级| 免费羞羞视频网站| 日本高清不卡中文字幕免费| 国产成人无码综合亚洲日韩| 免费精品国偷自产在线在线| 一级毛片a女人刺激视频免费| 亚洲国产天堂久久综合网站| 在线观看免费a∨网站| a级毛片在线免费看| 在线观看亚洲AV日韩A∨| 亚洲日韩精品一区二区三区无码| 日本妇人成熟免费中文字幕| 成人免费网站视频www| 亚洲国产日韩在线成人蜜芽| 亚洲国产主播精品极品网红| 精品香蕉在线观看免费| 香蕉免费看一区二区三区| 精品丝袜国产自在线拍亚洲| 国产V亚洲V天堂无码久久久| 国产精品无码素人福利免费| 91成人在线免费观看| 日日狠狠久久偷偷色综合免费 | 亚洲第一页在线观看| 亚洲爽爽一区二区三区| 成年男女男精品免费视频网站| 曰批全过程免费视频在线观看无码| 亚洲sm另类一区二区三区| 亚洲白嫩在线观看| 亚洲阿v天堂在线| 亚洲区日韩区无码区| 国产精品黄页在线播放免费| 在线观看日本免费a∨视频| 嫩草在线视频www免费观看| 人成午夜免费大片在线观看| 亚洲大尺度无码无码专线一区| 亚洲精品免费在线| 亚洲精选在线观看| 亚洲色WWW成人永久网址| 亚洲人成网站18禁止一区| 日韩精品亚洲专区在线观看|