DWR的转换器介绍

前端之家收集整理的这篇文章主要介绍了DWR的转换器介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

当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转换器有以下两个缺点:

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

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

此时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>

猜你在找的Ajax相关文章