DWR默认提供了一些类型转换器(boolean、byte、short、int、long、float、 double、char、java.lang.Boolean、java.lang.Byte、java.lang.Short、java.lang.Integer、 java.lang.Float、java.lang.Double、java.lang.Character、java.math.BigInteger、 java.math.BigDecimal、java.lang.String) 即如果定义的java类中有方法参数或返回值为这些类型则无需在dwr.xm中的<convert../>元素配置. 如果定义的java类中有方法的参数不是上述类型,为复合类型或数组或集合类型,则需要在dwr.xml中的<convert../>中配置. 1.对于方法返回或参数类型为复合类型,DWR提供了Bean转换器和Object转换器,但它们默认关闭,即在使用时必须打开:
<convert match="com.wang.Person" converter="bean"/> <convert match="com.wang.Person" converter="object"> <!--通过force参数指定可以访问对象的私有属性--> <param name="force" value="true"/> </convert>
要同时使用bean转换器转换某个包下的所有类:
<convert match="com.wang.*" converter="bean"/>
要使用bean转换器转换所有类:
<convert match="*" converter="bean"/>
object转换器也支持上述方式. bean转换器和object转换器的不同之处在于,bean转换器要求要转换的属性类必须符合JavaBean规范 即bean转换器是通过setter和getter方法来访问属性),而object没有上述要求(object转换器使用反射来访问属性) 例如: 对于方法:
public String sendObj(Person p) { return p.getName()+",您好,这是一个JavaBean参数的方法"; }
1.使用bean转换器:
<convert match="com.wang.Person" converter="bean"/>
则Person类必须符合javaBean规范:
package com.wang; public class Person { private String name; private int age; public Person(){} public Person(String name,int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
2.使用object转换器:
<convert match="com.wang.Person" converter="object"> <param name="force" value="true"/> </convert>
Person无需符合javaBean规范:
package com.wang; public class Person { private String name; public Person(){} public Person(String name,int age) { this.name = name; this.age = age; } }
默认情况生成的javascript对象包含所有属性,当使用javascript调用sendObj(Person p)方法使用json格式:
hello.sendObj( {name:'wang', age:23},cb);
其中cb为回调函数. 对于这个例子age属性完全没有用到,如果要使生成的javascript对象只是需要的,屏蔽某些属性有两种方式: (1)白名单方式:
<convert conterter="bean" match="com.wang.ajax.entity.Person"> <param name="include" value="property1,property2..."/> </convert>
对于本例:
<convert match="com.wang.Person" converter="bean"> <param name="include" value="name"/> </convert>
(2)黑名单方式:
<convert conterter="bean" match="com.wang.ajax.entity.Person"> <param name="exclude" value="property1,property2..."/> </convert>
对于本例:
<convert match="com.wang.Person" converter="bean"> <param name="exclude" value="age"/> </convert>
2.DWR默认打开数组转换器,即参数或返回值为数组时不需再dwr.xml中配置 返回值为数组时:
//data为返回值 for(var i = 0 ;i<data.length;i++) { result+=data[i].name; }
参数为数组时:
var args=[ {name:"aaaa"}, {name:"bbbb"} ] //cb为回调函数 methodA(args,cb);
3.DWR默认提供了两个集合转换器Map和Collection对象,无需显式配置 如果需要显式配置:
<convert match="java.util.Collection" converter="collection"/> <convert match="java.util.Map" converter="map"/>
DWR支持Collection放Map,也可Map放Collection. (1)如果集合不使用泛型,DWR无法确定集合元素的类型(可以在dwr.xml中<signatures.../>来声明集合元素数据类型) (2)不能明确指定集合的类型,只能使用基于接口的类型转换 参数是集合使用泛型:
public String sendList(List<Person> p1) { String result = ""; for(Person p : p1) { result += p.getName()+"<br/>"; } return result; }
javascript客户端调用时执行传入一个集合参数即可 参数是集合不使用泛型:
public String sendListNoGeneric(List p1) { String result = ""; for(Object p : p1) { result += ((Person)p).getName()+"<br/>"; } return result; }
需要在dwr.xml中:
<signatures> <!--DWR默认会导入java.lang.*下的所有类--> <![CDATA[ import java.util.List; import dwr.HelloDwr; import dwr.Person; HelloDwr.sendListNoGeneric(List<Person>); ]]> </signatures>
相关推荐
3. **DWR转换器**:由于DWR默认只能处理基本类型和少数Java标准库中的对象,对于自定义对象,我们需要在`dwr.xml`中配置相应的转换器,使DWR能够将这些对象转换为JavaScript可以理解的格式。 4. **JavaScript调用**...
资源名称:适合初学者的DWR基本使用视频教程资源目录:【】dwr01_dwr的安装【】dwr02_dwr的转换器和异常处理【】dwr03_dwr的util的介绍【】dwr04_文件上传和与spring进行整合【】dwr05_dwr的debug和获取ServletAPI...
3. **生成配置文件**:使用DWR生成器生成dwr.xml配置文件,定义允许客户端访问的Java方法。 4. **编写JavaScript代码**:使用DWR提供的API调用服务器方法,处理响应数据。 **4. DWR的典型应用场景** - **实时数据...
2. **转换器**:DWR自动处理基本类型的转换,但对复杂类型,如自定义对象,你需要定义转换器,这可以通过`<convert>`标签来设置。 3. **安全控制**:为了防止未授权的访问,你可以配置安全策略,例如使用`<filter>`...
- **convert**: 定义数据类型转换,`converter`指定转换器类型,`match`定义匹配哪种类型的Java对象进行转换。 ### 3. Creators Creators决定了DWR如何实例化服务器端的对象。常见的创作者包括: - **new**: 使用...
DWR2.0支持更多的转换器和适配器,以便处理不同类型的服务器数据。此外,它还提供了更丰富的错误处理机制,使得调试和故障排除更为方便。DWR2.0加强了性能,降低了服务器负载,并增加了对Spring框架的集成支持。 ...
在这个文件中,你可以定义哪些Java类和方法可以被浏览器访问,设置安全性限制,以及配置转换器和过滤器等。例如,通过`<allow>`标签,你可以指定允许JavaScript访问的Java类和方法;通过`<convert>`标签,可以为特定...
DWR.xml是DWR的核心配置文件,用于定义DWR的运行环境、初始化参数、转换器、创建者以及权限控制等关键信息。通过DWR.xml,开发者可以灵活地控制哪些服务器端对象和方法可供客户端调用,以及如何处理数据的序列化和反...
6. **DWR的高级特性**:如批量调用、反向AJAX(使服务器能主动更新客户端)、自定义转换器和适配器、以及DWR的集成框架,如Spring和Struts。 而“dwr.war”文件是DWR的可部署包,通常用于将DWR服务部署到Servlet...
4. **更灵活的配置**:DWR2允许更精细的配置,如自定义转换器和序列化器,以及更方便的白名单设置。 5. **新的API**:添加了新的JavaScript API,如`dwr.util`,提供了实用的数组和对象操作功能。 在MyEclipse中...
- 配置包括:设置安全策略、映射类和方法、设置转换器等。 3. **DWR的使用步骤**: - 创建Java类并暴露需要调用的方法。 - 在`dwr.xml`中声明这些类和方法。 - 编写JavaScript代码,使用DWR API(如`DWRUtil`、...
1. **安装与配置**:如何在你的Java应用服务器上集成DWR,配置DWR的XML配置文件(dwr.xml),以及如何在web.xml中设置过滤器和servlet。 2. **基本概念**:解释了Reverse Ajax、C/sweetalert、Batching和Caching等...
开发者可以通过自定义转换器扩展这个功能,以适应复杂的数据结构。 5. **错误处理**:DWR提供了丰富的错误处理机制,包括客户端和服务器端的异常处理,以及错误信息的传递和显示。 6. **缓存策略**:DWR 2.0支持...
- 主要配置包括DWR过滤器的初始化参数,这些参数控制着DWR的行为。 - **安全参数**:如`secureRequestOrigin`用于控制哪些来源的请求可以访问DWR服务。 - **Ajax服务器加载时保护参数**:如`protectFromAjaxLoad`...
视频资料,dwr视频教程,详细讲解dwr技术,dwr和...2.dwr02_dwr的转换器和异常处理;3.dwr03_dwr的util的介绍;4.dwr04_文件上传和与spring进行整合;5.dwr05_dwr的debug和获取ServletAPI;6.dwr06_dwr在项目中的运用
- **Engine**:引擎是DWR的核心,负责处理所有与远程调用相关的任务,包括安全、缓存、转换等。 - **Reverse Ajax**:DWR使用反向Ajax实现服务器向客户端的推送,使得服务器能够主动更新客户端的状态。 - **Cafe...
DWR通过将Java对象转换为JavaScript对象,使得在浏览器端可以直接调用服务器端的方法,从而简化了客户端与服务器端的数据交换。 **DWR搭建步骤** 1. **引入dwr.jar** - 将DWR的jar包添加到项目的lib目录下,这是...
2. **自动类型转换**:DWR自动处理JavaScript和Java对象之间的类型转换,使得在客户端和服务器端之间传递数据变得简单。 3. **安全机制**:DWR提供了一套安全机制,如白名单、签名等,确保只有授权的函数可以被调用...
DWR已经内置了一些常见的转换器,如`NullConverter`,`PrimitiveConverter`,`BigNumberConverter`和`StringConverter`,用于处理基本类型和特殊类型的转换。 6. **allow元素**: `<allow>`部分定义了哪些Java类...
这个例子中,DWR会使用内置的"bean"转换器处理`MyCustomClass`对象。 3. **SafariHack元素**:由于早期版本的Safari浏览器存在一些限制,DWR提供了这个元素来解决兼容性问题。 4. **Customelements**:允许开发者...