DWR的转换器介绍
2016-06-12 14:39
211 查看
当java方法的参数不是基本数据类型也不是字符串类型时,DWR无法正常识别这种自定义类型的数据,必须在配置文件中定义转换器。转换器的作用是完成java实例和JavaScript对象之间的相互转换,从而保证Ajax交互的正常通信。
基本转换器
基本转换器的作用是用于负责完成java类型和JavaScript类型之间的相互转换。
对于普通的情形,我们无须显示使用准换器,对于所有的基本数据类型,包括String和BigDecimal等,DWR已经提供了一种简单对象的转换器,无须在dwr.xml
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转换器,可以采用如下编码:
以上的转换器表明DWR将使用setter和getter方法访问com.bh.domain.User对象的各个属性Bean转换器要求java对象必须符合JavaBean规范,要求每个属性都必须有对应的getter方法和setter方法。
如果同时需要转换某个包下的所有类,可采用如下格式:
下面的配置指定所有的类都是使用Bean转换器进行转换:
在某些情况下,假设类A有x、y、z三个属性,但是希望DWR将A实例转换成javascript对象后只包含x和y属性,屏蔽z属性,则可以使用Bean转换器的限制转换功能,限制转换有两种方式:
黑名单方式:被黑名单列出的属性将不会转换到JavaScript对象中。
Object转换器
数组转化器
默认情况下数组转换器是打开的,不管数组元素时基本类型还是字符串或者是其他引用数据类型,DWR都可以支持转换。因此不管远程java方法中的参数是数组还是java方法返回值是数据,都不需要在dwr.xml 中增加额外的配置。
集合类型转换器
DWR提供了两个集合转换器,两个转换器分别用于转换Map对象好collection对象。DWR默认已经打开这连个集合转换器,因此也无需在dwr.xml中额外配置。
map和collection转换器有以下两个缺点:
如果集合不使用泛型限制集合元素的类型,则DWR无法确定集合元素的类型,因此这两个转换器都不能把集合元素转换成有意义的JavaScript对象。
不能明确指定集合的类型,只能使用基于接口的类型转换。
此时DWR允许在dwr.xml中使用
基本转换器
基本转换器的作用是用于负责完成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>
相关文章推荐
- trunc(sysdate)的含义是什么
- 每个Java文件自动导入的library
- node.js事件循环
- 学习如何学习
- LATEX--排版神器
- PRO2-Day4
- php下的命令行执行
- 动态规划(决策单调优化):BZOJ 4518 [Sdoi2016]征途
- 4、Hibernate入门4
- 微信竟然还能当笔记用!【微信高级教程8】
- C语言回顾与再学习-Function call by reference in C
- 面试题6: 二叉树的重建
- Eclipse和MyEclipse的区别
- 解决java.lang.OutOfMemoryError: unable to create new native thread问题
- 哭吧!喜欢玩数独游戏的亲们!你被取代了——C语言解数独
- 【代码安全】浅谈代码混淆加固技术
- java并发编程-读写锁
- (转)Tomcat文件详解
- asp.net中GridView上的行绑定
- Hibernate 中setResultTransformer的作用