zoukankan      html  css  js  c++  java
  • 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);

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

  • 相关阅读:
    设计模式-适配器模式
    设计模式-模板方法模式
    设计模式-策略模式
    spring-消息
    spring-集成redis
    spring-mvc高级技术
    spring-AOP
    restful规范
    十一,装饰器详解
    十,函数对象,嵌套,名称空间与作用域,闭包函数
  • 原文地址:https://www.cnblogs.com/xianxh/p/4875318.html
Copyright © 2011-2022 走看看