DWR的Converter实现原理简单分析及应用
时间:2011-09-14 unmi 隔叶黄莺
我们在应用 DWR 调用远程方法时涉及到 JS 与 JAVA 之间参数和返回值的数据转换,例如:
JS 的 123 与 Java 的 int或 Integer、long 间的转换
JS 的 "2009-06-23" 与 Java 的 java.util.Date 之间的转换
JS 的 "[1,2,3]" 与 Java 的 int[] 间的转换
JS 的 "{id:123, name: ''Unmi''}" 与 Java 的 Class Person{int id; String name} 间的转换
或者更复杂的嵌套类型( "{id:123, name: ''Unmi'', blogs: [''http://unmi.blogjava.net'',''http://blog.csdn.net/kypfos'']}" ) 与 Java 类型间的转换,等等。 那么这一切是怎么进行的呢?其实我们见识过很多组件的类型映射,如 Java 的 PropertyEditor、 Hibernate(UserType)、iBatis(TypeHandler) 的类型映射,Struts1/2 中 Form/Model 用的 Converter 等。
这里我来稍稍分析 DWR 的 Converter 实现,以及说明如何定制自己的 Converter。本文所用 DWR 是 2.0.5 版。
1. DWR 内置的 Converter 及应用类型
名称 |
应用类型 |
转换器 |
null |
void,java.lang.Void |
NullConverter |
enum |
|
EnumConverter |
primitive |
boolean,byte,short,int,
long,float,double,char,
java.lang.Boolean,java.lang.Byte,
java.lang.Short,
java.lang.Integer,java.lang.Long,
java.lang.Float,
java.lang.Double,java.lang.Character
|
PrimitiveConverter |
bignumber |
java.math.BigInteger,java.math.BigDecimal |
BigNumberConverter |
string |
java.lang.String |
StringConverter |
array |
[Z,[B,[S,[I,[J,[F,[D,[C,[L* |
ArrayConverter |
map |
java.util.Map |
MapConverter |
collection |
java.util.Collection |
CollectionConverter |
date |
java.util.Date,java.sql.Date,
java.sql.Time,
java.sql.Timestamp,
java.util.Calendar
|
DateConverter |
dom |
org.w3c.dom.Node,org.w3c.dom.Element,
org.w3c.dom.Document |
DOMConverter |
dom4j |
org.dom4j.Document,org.dom4j.Element,
org.dom4j.Node |
DOM4JConverter |
jdom |
org.jdom.Document,org.jdom.Element |
JDOMConverter |
xom |
nu.xom.Document,nu.xom.Element,
nu.xom.Node |
XOMConverter |
servlet |
javax.servlet.ServletConfig,
javax.servlet.ServletContext,
javax.servlet.http.HttpServletRequest,
javax.servlet.http.HttpServletResponse,
javax.servlet.http.HttpSession
|
ServletConverter |
bean |
|
BeanConverter |
object |
|
ObjectConverter |
hibernate2 |
|
H2BeanConverter |
hibernate3 |
|
H3BeanConverter |
url |
java.net.URL |
URLConverter |
exception |
|
ExceptionConverter |
miniException |
java.lang.Throwable |
MinimalistExceptionConverter |
|