用户名: 密码: [免费注册] [忘记密码]
您的位置:首页 -- JAVA技术--
Ajax框架中选DWR还是A4J
发布:    2010-03-20     返回

在网上找了一圈Ajax的Java框架,感觉不错的只有两个,一个是被提到比较多的DWR(Direct Web Remoting),另一个是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 "请填入密码";

    &nb sp;  

        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 "-//W

3C//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的组件树也可以让开发的速度加快。

在网上找了一圈Ajax的Java框架,感觉不错的只有两个,一个是被提到比较多的DWR(Direct Web Remoting),另一个是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="passwo rd" 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>

&nbs p;

<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 "-//W

3C//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:outputTex t 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的组件树也可以让开发的速度加快。

典型客户
JAVA技术
 
友情链接: 沈阳网站建设 |  阜新网站建设 |  阜新网站 |  安全评价 |  沃尔沃配件 |  链接申请与客服联系
域信息科技提供专业的jsp空间服务,jsp空间,jsp空间租用,jsp空间购买,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器
售前电话:400-004-4994
售后电话:400-004-4994
技术支持(7×24支持):400-004-4994 018241839456
公司地址:阜新市中华路65号新天地大厦9F
邮编:123000       传真:0418-2493388-606
经营性ICP证:辽B-2-4-20070114    ICP备案: 辽ICP备07005704号
域信息科技提供专业的jsp空间,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器
域信息科技提供专业的jsp空间,虚拟JSP主机,jsp主机,独享TOMCAT,JSP服务器