快速业务通道

Struts2中的参数传递 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
member - member (Constructor, Method or Field) being set * propertyName - property name being set * value - value to be converted * toType - type to which value is converted */ public Object convertValue(Map context, Object target, Member member, String propertyName, Object value, Class toType);

Struts2中的参数传递(8)

时间:2011-02-04

知道了原理,就简单了,我们可以自己实现一个TypeConverter的实现类,并且在Struts2中注册一下使用这个TypeConverter的Java类型的对应关系,我们就可以完成自定义的类型转化了。

具体的例子,可以参考一下Quake Wang同学在2005年时的一篇文章:http://www.javaeye.com/topic/10507。文章针对的是Webwork2,但是无论是实现方式还是操作步骤,与Struts2是完全相同的。值得提醒的是,这篇文章的回复也非常有价值,在看文章的同时,不要忘记看回复。

不过针对Quake Wang的例子,我也想做一些补充。它的例子中,主要讲述了Struts2中如何去做java.utils.Date的自动类型转化,也正如后面回复中有人提到:

wolfsquare 写道

如果我在界面上有两种格式的日期怎么办?

例如一种短格式: SimpleDateFormat("yyyy-mm-dd"),一种长格式SimpleDateFormat("yyyy-mm-dd hh:MM:ss")

而Quake Wang对此是这样解决的:

Quake Wang 写道

可以根据你的应用情况,看哪种方式是比较常见的转换规则,那么把这个规则定成Application-wide conversion rules:

Java代码

在classpath root下面写一个xwork-conversion.properties: java.util.Date=com.javaeye.core.webwork.converter.DateConverter

另外的一个转换,可以写成Class-specific conversion rules :

otherDate=com.javaeye.core.webwork.converter.OtherDateConverter

我在这里提供一个我在实际项目中采用的方式:

Java代码

public class DateConverter extends DefaultTypeConverter {    private static final Log logger = LogFactory.getLog(DateConverter.class);    private static final String DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";    private static final String DATE_PATTERN = "yyyy-MM-dd";    private static final String MONTH_PATTERN = "yyyy-MM";    /**    * Convert value between types    */    public Object convertValue(Map ognlContext, Object value, Class toType) {      Object result = null;      if (toType == Date.class) {        result = doConvertToDate(value);      } else if (toType == String.class) {        result = doConvertToString(value);      }      return result;    }    /**    * Convert String to Date    *    * @param value    * @return    */    private Date doConvertToDate(Object value) {      Date result = null;      if (value instanceof String) {        // TODO add date converter parse order here        result = DateUtils.parseDate((String) value, new String[] { DATE_PATTERN, DATETIME_PATTERN, MONTH_PATTERN });        // all patterns failed, try a milliseconds constructor        if (result == null && StringUtils.isNotEmpty((String)value)) {          try {            result = new Date(new Long((String) value).longValue());          } catch (Exception e) {            logger.error(

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号