DWR的Converter实现原理简单分析及应用 - 编程入门网
14 unmi 隔叶黄莺
4. 定制自己的 Converter 基本上 DWR 内置的 Converter 就够用的,但也有可能需要定定自己的 Converter。从 DWR 的 Converter 实现来看,一般会用两种方式: 1) extends Bas***0Converter 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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |