您的位置:首页 > 其它

DWR的转换器介绍

2016-06-12 14:39 211 查看
当java方法的参数不是基本数据类型也不是字符串类型时,DWR无法正常识别这种自定义类型的数据,必须在配置文件中定义转换器。转换器的作用是完成java实例和JavaScript对象之间的相互转换,从而保证Ajax交互的正常通信。

基本转换器

基本转换器的作用是用于负责完成java类型和JavaScript类型之间的相互转换。

对于普通的情形,我们无须显示使用准换器,对于所有的基本数据类型,包括String和BigDecimal等,DWR已经提供了一种简单对象的转换器,无须在dwr.xml
<allow
>元素中使用
<convert>
元素定义。

DWR默认支持的类型有:boolean、byte、short、int、long、float、double、char、java.lang.Boolean、java.lang.Byte、java.lang.Short、java.long.Integer、java.lang.Long、java.long.Float、java.long.Double、java.long.Character、java.math.BigInteger、java.math.BigDecimal和java.lang.String。

对于日期类型的数据,DWR则提供了Date转换器。Date转换器负责在JavaScript的Date类型与java中的date类型(java.util.Date、java.sql.Date、java.sql.Times或java.sql,TimeStamp)之间进行转换,DWR默认支持Date准换器。

对象准换器

DWR默认关闭了Bean和Object转换器。Bean转换器用于完成JavaBean对象和JavaScript对象之间的转换。Bean准换器默认是关闭的,因此必须在dwr.xml文件中显示打开该转换器才可以在java方法中使用对应的JavaBean实例作为参数或返回值。

Object转换器与Bean转换器的作用完全相同,都是用于完成java 对象和JavaScript对象之间的转转。但是Object转换器的功能更加强大,Object转换器通过java的反射来访问java对象的属性,即Object转换器用于转换普通的Java对象(没有getter和setter方法)。

为某个类单独打开一个Bean转换器,可以采用如下编码:

<convert converter=“bean” match=“com.bh.domain.User”/>


以上的转换器表明DWR将使用setter和getter方法访问com.bh.domain.User对象的各个属性Bean转换器要求java对象必须符合JavaBean规范,要求每个属性都必须有对应的getter方法和setter方法。

如果同时需要转换某个包下的所有类,可采用如下格式:

<convert converter=“bean” match=“com.bh.domain.*”/>


下面的配置指定所有的类都是使用Bean转换器进行转换:

<convert converter=“bean” match=“*”/>


在某些情况下,假设类A有x、y、z三个属性,但是希望DWR将A实例转换成javascript对象后只包含x和y属性,屏蔽z属性,则可以使用Bean转换器的限制转换功能,限制转换有两种方式:

黑名单方式:被黑名单列出的属性将不会转换到JavaScript对象中。

<convert converter=“bean” match=“com.bh.domain.A”>
<param name="execlude" value="z,......"/>
</convert>


白名单方式:没有被白名单列出的属性将不会转换到javascript对象中。


Object转换器

<convert converter=“object” match=“com.bh.domain.A”>
//指定force=true强制使用反射访问私有属性
<param name="force" value="true"/>
</convert>


数组转化器

默认情况下数组转换器是打开的,不管数组元素时基本类型还是字符串或者是其他引用数据类型,DWR都可以支持转换。因此不管远程java方法中的参数是数组还是java方法返回值是数据,都不需要在dwr.xml 中增加额外的配置。

集合类型转换器

DWR提供了两个集合转换器,两个转换器分别用于转换Map对象好collection对象。DWR默认已经打开这连个集合转换器,因此也无需在dwr.xml中额外配置。

map和collection转换器有以下两个缺点:

如果集合不使用泛型限制集合元素的类型,则DWR无法确定集合元素的类型,因此这两个转换器都不能把集合元素转换成有意义的JavaScript对象。

不能明确指定集合的类型,只能使用基于接口的类型转换。

此时DWR允许在dwr.xml中使用
<signatures.../>
来声明集合元素的数据类型,从而可以让DWR能正确识别集合元素的类型。当然使用泛型限制集合元素类型将会更加简洁。

<!-- 因为sendListNoGeneric方法中list没有指定参数类型,需要借助signatures标签指定其类型 -->
<signatures>
<![CDATA[
import java.util.List;
import com.bohua.dwr.HelloDwr;
import com.bohua.beans.Person;
HelloDwr.sendListNoGeneric(List<Person>);
]]>
</signatures>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: