快速业务通道

DWR的Converter实现原理简单分析及应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
14 unmi 隔叶黄莺

4. 定制自己的 Converter

基本上 DWR  内置的 Converter 就够用的,但也有可能需要定定自己的 Converter。从 DWR 的 Converter 实现来看,一般会用两种方式:

1) extends BaseV20Converter implements Converter,实现 Converter 的 converterInbound() 和 converterOutbound() 方法

2) extends BasicObjectConverter implements Converter,或继承 BeanConverter,实现 BasicObjectConverter 的 getPropertyMapFromObject(),getPropertyMapFromObject() 和 createTypeHintContext() 方法。

前一种方式,请参照 org.directwebremoting.convert.DateConverter 的源码实现:

convertInbound() 由 JS 的字符串转换成要求的 Date、Time、Timestamp 或 Calender 对像。

convertOubound() 把 Java 的类型转换成 JS 的 new Date() 类型,注意返回值的写法:

return new SimpleOutboundVariable("new Date(" + millis + ")", outctx, true);

第二种继承 BasicObjectConverter 或是 BeanConverter 的做法,可参考 BeanConverter  的源码 实现。表现在 JSON 和 Java 对象间的转换,要是引入解析 JSON 的 JAR 包或许能有不少帮助。

定制 Converter 的内容讲的很少,主要是真有这方面的需要的时候请参考 DWR  的相关源码,实际 中理解各个接口方法参数的意义,及返回值的要求。对待开源组件还是要保持阅读源码的好习惯。

好啦,自己的 Converter 写好,需要注册,需要应用。我们还是参考 DWR 的做法,写在自己的 dwr.xml 中。例如定制了 com.unmi.dwr.converter.SpecialConverter,要对 com.unmi.model.SpecialObject 进行出入类型的转换,就这么写:

<converter id="special" class="com.unmi.dwr.converter.SpecialConverter"/> 注册了  special 转换器

<convert converter="special" match="com.unmi.model.SpecialObject"/> 应用注册的 special 转换器应用到 com.unmi.model.SpecialObject  类型

5. 小结

用 DWR 其实也有段时日了,未曾系统的学,总是遇一问题、扫除一个,不免也会去找找相关更系统 的资料。然而着下此篇的动机是上周六在书城翻了下 《 DWR 实战》,它实际讲 DWR 本身的较少。最后 我第一个想了解了是 DWR 能完成 JS 与 Java 间什么类型的转换,第一手的资料网上也没搜索到,于是 进到源码中去,亲身历练,也更加深了印象。

读者也许和我一样目的,只想看看内置的转换器有哪些,能转换哪些类型,那就只需看最为抢眼的那 张表格吧。需要定制 Converter 应该很少,就像我们很少定制 Struts 的 Converter、Hibernate 的 UserType 和 iBatis 的 TypeHandler 一样。因此也就对定制 DWR 的 Converter 所用篇幅不多。

对待开源,自己总有个习惯就是必须有相关的源代码伴随在它身边。开源组件的使用一般不难,碰到 问题,既然源码都掌握了,我想总能从源码中找出原因来。尚且,对这样的知名组件越发深入,就更能嚼 出许多味多。

参考:DWR 2.0.5 的源代码,对 DWR 项目进行单步调试

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号