java.util.Date的set方法问题(struts2类型转换)
2013-03-08 16:31
435 查看
java.util.Date的set方法与struts2类型转换,关系似乎不大,但某些情况下,java.util.Date需要转换才能被set,特别是在struts2使用下。
情况是这样的,项目进入测试阶段,一个bug让我们很头疼。页面上my97日期插件选择的日期,在MAC系统中FF下,传到后台无法被set(其他系统其他浏览器正常。。。)。研究时发现,服务器报的异常是找不到该属性的setBirthday([Ljava.Lang.String birthday),但实际上,birthday定义的是java.util.Date。
无奈之下,就写了一个Stirng类型的set方法
如此,MAC机FF访问windows开发机,正常。问题在后面,待部署到测试机(linux),又说找不到setBirthday(String)。。。不可思议之下,将setBirthday(String)提到setBirthday(java.util.Date)之前,正常。
这个bug算是修复了,但总觉得怪异。后面和同事聊起,说可能是struts2的数据转换问题,单独加上数据转换(拿掉setBirthday(String)),确实正常,索性就把两种解决方法都加上。
xwork-conversion.properties,放于src目录下。
此处也可以看到,struts2是以数组接受参数的,上面的([Ljava.Lang.String birthday)也就不难理解。
struts2数据转换器可参见:/article/5040513.html
情况是这样的,项目进入测试阶段,一个bug让我们很头疼。页面上my97日期插件选择的日期,在MAC系统中FF下,传到后台无法被set(其他系统其他浏览器正常。。。)。研究时发现,服务器报的异常是找不到该属性的setBirthday([Ljava.Lang.String birthday),但实际上,birthday定义的是java.util.Date。
/** * 生日 */ private java.util.Date birthday; public java.util.Date getBirthday() { return birthday; } public void setBirthday(java.util.Date birthday) { this.birthday = birthday; }
无奈之下,就写了一个Stirng类型的set方法
public void setBirthday(String birthday) { Date date = null; if(!StringUtils.isEmpty(birthday)){ try { date = DateUtil.convertStringToDate(birthday); } catch (ParseException e) { e.printStackTrace(); } } this.birthday = d1; }
如此,MAC机FF访问windows开发机,正常。问题在后面,待部署到测试机(linux),又说找不到setBirthday(String)。。。不可思议之下,将setBirthday(String)提到setBirthday(java.util.Date)之前,正常。
这个bug算是修复了,但总觉得怪异。后面和同事聊起,说可能是struts2的数据转换问题,单独加上数据转换(拿掉setBirthday(String)),确实正常,索性就把两种解决方法都加上。
#DateConverter java.util.Date=org.abc.commons.util.DateTypeConverter
xwork-conversion.properties,放于src目录下。
public class DateTypeConverter extends DefaultTypeConverter { @Override public Object convertValue(Map context, Object value, Class toType) { SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); if (toType == Date.class) { // 浏览器向服务器提交时,进行String to Date的转换 Date date=null; String dateString = null; String[] params = (String[]) value; dateString = params[0];// 获取日期的字符串 try { date=simpleDateFormat.parse(dateString);// 遍历日期支持格式,进行转换 return date; } catch (Exception e) { } return null; } else if (toType == String.class) { // 服务器向浏览器输出时,进行Date to String的类型转换 Date date = (Date) value; return new SimpleDateFormat("yyyy-MM-dd").format(date);// 输出的格式是yyyy-MM-dd } return null; } }
此处也可以看到,struts2是以数组接受参数的,上面的([Ljava.Lang.String birthday)也就不难理解。
struts2数据转换器可参见:/article/5040513.html
相关文章推荐
- Spring3MVC 提交请求参数中的日期问题(java.lang.String cant not convert to java.util.Date)
- java.util.Collections.synchronizedSet()方法实例
- [转]java.sql.Date、java.util.Date与数据库中的Date字段的转换方法
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- [JSP] java.sql.date 到 java.util.date转化时出现的问题
- JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法
- JAVA日期格式问题 SimpleDateFormat方法
- java.util.Date与java.sql.Date的关系和转换方法
- java.util.IdentityHashMap.entrySet()方法实例
- java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法
- 将Fri May 04 17:25:34 CST 2012形式的日期字符串转换成java.util.Date对象的方法
- java get/set方法 属性大小写问题
- JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法 转载自:
- 关于Error:JAVA_HOME is not set and could not be found问题的解决方法
- JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法
- 解决mysql 数据库中日期类型00:00:00 的问题 设置xml数据类型:java.util.Date
- setDate()与setTimestamp()的区别和转换(java.util.Date和Timestamp的转换)
- java中Date的getTime() 方法奇葩问题
- beanutils工具类将字符串转换成Date(java.util.Date)数据类型的方法
- JAVA 处理时间 - java.sql.Date、java.util.Date与数据库中的Date字段的转换方法[转]