码迷,mamicode.com
首页 > Web开发 > 详细

Ajax框架---dwr的用法

时间:2015-06-30 00:00:22      阅读:276      评论:0      收藏:0      [点我收藏+]

标签:

通常使用Ajax时用的都是jQuery框架,现在公司的框架里用的都是dwr。我觉得dwr和jQuery中的ajax用法差不多,看起来也很像。

一、简介

  百度百科上对dwr的描述:

DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码。这样WEB开发人员就可以在JavaScript里使用Java代码,就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源。出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用。

二、用法

  (1)引入dwr

    1.下载dwr.jar,放大项目WEB-INF的lib下

    2.在web.xml中配置。把以下代码粘贴到web.xml的后边:
    

 1 <servlet>
 2     <servlet-name>dwr-invoker</servlet-name>
 3     <display-name>DWR Servlet</display-name>
 4     <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
 5     <init-param>
 6         <param-name>debug</param-name>
 7         <param-value>true</param-value>
 8     </init-param>
 9 </servlet>
10 <servlet-mapping>
11     <servlet-name>dwr-invoker</servlet-name>
12     <url-pattern>/dwr/*</url-pattern>
13 </servlet-mapping>

 (2)写dwr.xml

  dwr.xml和web.xml放到同一目录下。

  dwr.xml的写法如下:

<dwr>
    <allow>
        <convert converter="bean" match="com.dwr.TestBean">
        <create creator="new" javascript="testClass" >
            <include method="testMethod1"/>
        </create>
    </allow>
</dwr>

<allow>标签内是允许页面访问的内容。

<create>表示允许访问的类。

——creator属性表示该类的实例的创建方式,值可以是new或spring。new表示通过类的默认构造函数来创建。spring表示通过与IOC容器Spring进行集成来获得实例。

——javascript属性表示在js中访问的类名。(类名首字母小写)

<include>表示类中允许访问的方法名。

<converter>是告诉dwr如何在js中的参数和后台Java中的参数之间进行类型转化。js中调用后台方法时,传递的参数是js中的类型;但后台该方法的该参数是Java类型的。后台方法返回值时,值是Java类型的;但前台js中回调函数接受的该参数是js中的类型。<converter>的作用就是在这其中转换。当这个参数是Java的基本类型时,不需要些<converter>;当是自定义类的时候,就必须要写<converter>了,否则无法正常转换。match参数写实体类的完全限定名。

(3)写后台方法

后台Action中,该方法时public的:

public class TestClass{
    public void testMethod1(){
        ......
    }
}

(4)页面js调用

1.在页面上引入dwr的js文件

1 <script src=‘/WEB-INF/dwr/interface/testClass.js‘></script>
2 <script src=‘/WEB-INF/dwr/engine.js‘></script>
3 <script src=‘/WEB-INF/dwr/util.js‘></script>

其中第一行是这个页面上请求的方法名.js,是dwr根据dwr.xml中的配置自动生成的。使用dwr的时候不要忘记引用这个js文件。

第二行和第三行是dwr带的js

2.调用方法

如下:

1 testClass.testMethod1();

 ①如果testMethod1有参数:

public class TestClass{
    public void testMethod1(String name){
        ......
    }
}

调用:

1 testClass.testMethod1("tom");

②如果testMethod1参数是自定义类型的:

1 public class TestClass{
2     public void testMethod1(TestBean testBean){
3         ......
4     }
5 }
1 public class TestBean{
2     private String name;
3     private String age;
4     
5     //get,set
6     ......
7 }

则在dwr.xml中写<converter>,调用的时候:

1 var param={ name:"tom", age:10 }
2 testClass.testMethod1(param);

③如果testMethod1有返回值,返回值通常有这几种类型:String、对象、JSON,用回调函数接收并处理返回值。

1 testClass.testMethod1(name,function(data){
2     alert("返回的值:"+data);
3 });

返回值是对象时:

1 testClass.testMethod1(name,function(data){
2     for(var property in data){//不知道对象属性名时的处理方法
3         alert("property:"+property);//对象的属性名
4         alert(property+":"+data[property]);//属性对应的值
5     }
6 });

或者:

1 testClass.testMethod1(name,function(data){
2     for(var property in data){//知道对象属性名时的处理方法
3         alert(data.name);
4         alert(data.age);
5     }
6 }

 返回的是JSON时,在后台返回JSON的字符串,页面的js上:

1 testClass.testMethod1(name,function(data){
2     var jsonData=JSON.parse(data);//把JSON的字符串转换成JSON,如果不处理的话,是无法直接解析JSON的字符串的
3     //处理JSON数据
4    ......
5 }

 ④如果调用Java方法的参数是List、Set或Map类型的

例子1:参数是List<TestBean>,js:

 1 var param1=[
 2      {
 3          name:tom,
 4          age:10
 5      },
 6      {
 7          name:jack,
 8          age:12
 9      }
10  ];
11 testClass.testMethod(param1,function(data){
12 
13 })

在dwr.xml中的配置,在<allow>后加上:

<signatures>
    <![CDATA[
        import java.util.List;
        import com.dwr.TestClass;
        import com.dwr.TestBean;
        TestClass.testMethod(List<TestBean>);
    ]]>
</signatures>

<signatures>标签是用来说明List中是什么类型的数据。 

例子2:参数是Map类型

1 var param1=[
2     "key1":{name:tom,age:10},
3     "key2":{name:jack,age:12}
4 ];
5 testClass.testMethod(param1,function(data){
6     ......
7 }

在dwr.xml中的配置类似上边的,改为:TestClass.testMethod(Map<String,TestBean>);即可

⑤如果调用的Java方法返回的是List、Set、Map类型的值

 除了上述的方法外,没有特殊的写法。处理回调函数时,类似③的处理方式:

例子1:返回类型是List<TestBean>

技术分享
 1 testClass.testMethod6(callBackFunction(data){
 2     //对于JavaBean返回值,有两种方式处理
 3    //不知道属性名称时,使用如下方法
 4    for(var i=0;i<data.length;i++){
 5         for(var property in data[i]){
 6             alert("property:"+property);
 7             alert(property+":"+data[i][property]);
 8         }
 9     }
10 
11     //知道属性名称时,使用如下方法
12    for(var i=0;i<data.length;i++){
13         alert(data[i].username);
14         alert(data[i].password);
15     }
16 });
View Code

 例子2:返回类型是Map<String,TestBean>

技术分享
1 for(var property in data){
2     var bean = data[property];
3     alert(bean.username);
4     alert(bean.password);
5 }
View Code

 

 

 

 

 

 

 

  

Ajax框架---dwr的用法

标签:

原文地址:http://www.cnblogs.com/mySummer/p/4604946.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!