先贴一下摘抄的异常关键字
[com.opensymphony.xwork2.ognl.OgnlValueStack]-[WARN] Error setting expression ‘datetime‘ with value ‘[Ljava.lang.String;@74448287‘ ognl.MethodFailedException: Method "setDatetime" failed for object [email protected] [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);
这种做法比较简便,不影响全局配置,大体上不会引入新错误,就是如果这种日期输入情况比较多,就会造成很多重复代码。
时间: 2024-11-17 06:02:09