当前位置: 首页 > 图文教程 > Java技术 > Web框架 > Ajax框架中选DWR还是A4J

Web框架
Web框架:Struts标记库定制JSP标记
Web框架:简述Ajax技术的那些框架
Web框架:利用列表数据提高开发效率
Web框架:Struts2中声明式异常处理
Web框架:小议Spring的异常处理那点事
Web框架:详谈AOP概念
Web框架:小编浅谈Struts2的Ajax支持
Web框架:Ajax提供的div标签
Web框架:程序员之家七月份Web框架总结
Web框架:浅谈Spring Bean封装机制
Web框架:小编浅谈Struts配置文件
Web框架:小编谈Spring中的AOP 应用
Web框架:Spring的闪亮之处:事务管理
Web框架:浅谈iBATIS的动态映射
Web框架:Hibernate中五个接口那些事
Web框架:Hibernate的ORM与Hibernate的优点
Web框架:Struts2的OGNL
Web框架:Struts中的ActionForm 作为防火墙
Web框架:小编浅谈Struts2中使用JSON插件实现Ajax
Web框架:Aegis绑定那些事

Web框架 中的 Ajax框架中选DWR还是A4J


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-23   浏览: 239 ::
收藏到网摘: n/a

在网上找了一圈AjaxJava框架,感觉不错的只有两个,一个是被提到比较多的DWRDirect 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 "请填入密码";

       

        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是基于JSFManaged Bean上开发的,所以Bean里的其它代码都可以用到JSF其它的地方,所以Java的开发量是相同的。其次看配置量,A4J稍有一些优势,只要在JSF中配置了就不用在配置,而DWR还需要再配置一个XML文件。最后看页面的代码量,这一点A4J的优势更加明显,程序员完全不用写JavaScript代码,只需将要异步刷新的地方加入a4j的标签即可。

    总的来说,在节省代码量这个方面A4J是胜利的。

2.灵活性

    这一点DWR是明显的赢家,DWR适合各种框架,在设计时都考虑到了如SpringJSFStruts等的集成。而A4J仅适合JSF框架,对应用范围做了很大的限制。在集成方面不仅仅是Java框架,还有现在越来越流行的JavaScript框架(如DojoQooxdoo等),因为A4J封装了JavaScript代码,开发者无法像DWR一样可以自由的使用JavaScript。当开发者习惯于将一些逻辑写在JavaScipt中时,使用A4J可能会造成很多的不便。

3.风险性

    A4J以标签为开发手段,减去了应用程序开发者在JavaScriptDHTML等方面开发的时间,但同时也可能埋下风险的隐患。在开发一个Web应用的时候,开发者需要全面的评估应用中会使用到的技术功能,确定利用A4J可以实现,毕竟这是一个新成长起来的框架,需要更加留意。另外在安全方面,两个框架都还无从考证。

4.前景

    DWR2.0里实现了Ajax的反转,即在Java中执行JavaScript代码,似乎标志着一种新的开发方式。A4J则搭上了JSF这趟快车,各个大公司都在谋划着将应用开发进一步的分工,上游厂商制定组件,下游的公司使用组件为企业提供服务,JSF是它们赚钱的一个好工具,一定会继续推而广之,而A4J也会随着JSF的成长而成长。

·总结

    也许还不到总结的时候。我想用DWR还是A4J,可以参考究竟使用Struts还是JSFDWR的灵活性和Struts是对应的,两者结合可以开发出灵活性很高的程序。A4J则肯定和JSF搭配,JSF的组件树也可以让开发的速度加快。