struts保存对象date报String类型不匹配

先贴一下摘抄的异常关键字

[com.opensymphony.xwork2.ognl.OgnlValueStack]-[WARN] Error setting expression 'datetime' with value '[Ljava.lang.String;@74448287'
ognl.MethodFailedException: Method "setDatetime" failed for object com.oss.Merchant@e6c7c0e [java.lang.NoSuchMethodException: com.oss.Merchant.setDatetime([Ljava.lang.String;)]
...

Caused by: java.lang.NoSuchMethodException: com.oss.Merchant.setDatetime([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1246)
... 102 more
/-- Encapsulated exception ------------
java.lang.NoSuchMethodException: com.oss.Merchant.setDatetime([Ljava.lang.String;)

再描述一下异常请款。本地,测试,正式三个环境皆没有问题的,外国使用确无法保存,查看日志,发现以上报错。于是百度谷歌了一番,有以下解释:

yyyy-MM-dd格式,在外国不是一个标准的时间显示格式,Struts解释是针对输入,最近似哪种类型而进行转换,这样格式的日期,被误认为是字符串。

网上教授的解决方法是:

1,建一个转换方法,加上配置文件,所有的字符串转日期都经过此工具类转换。

2,将系统的字符编码从LANG="en_US.UTF-8",修改为:LANG="zh_CN.UTF-8"

3,还有说用插件就可以,如My97DatePicker(我的工程本身就是用这个插件的,所以我认为这种解决方法不可取)

4,在jsp页面用java.util.Date先转类型(觉得不会管用)

有兴趣的朋友可以尝试一下。

我选择的是第三种解决方法,定义一个String dateStr,接收表单的输入,然后

String dateStr;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date= sdf.parse(dateStr); merchant.setDatetime(date);

这种做法比较简便,不影响全局配置,大体上不会引入新错误,就是如果这种日期输入情况比较多,就会造成很多重复代码。

原文地址:https://www.cnblogs.com/xianxh/p/4875318.html