当前位置: 代码迷 >> 综合 >> ognl.MethodFailedException: Method setEndtime failed for object
  详细解决方案

ognl.MethodFailedException: Method setEndtime failed for object

热度:17   发布时间:2024-01-05 03:47:06.0

ognl.MethodFailedException: Method "setEndtime" failed for object com.piptrade.action.tradetools.eCalerddarAction@17db177 [java.lang.NoSuchMethodException: setEndtime([Ljava.lang.String;)]

 

 

简单分析,通过form提交过来的endtime是String类型的,而action里的endtime不是String类型,这个Endtime对应的setEndtime方法的参数类型不是String了,估计这个是Date吧。

 

据了解,struts2有默认的类型转的,基本类型都可以转换的

boolean和Boolean:完成字符串和布尔值之间的转换;
char和Character:完成字符串和字符之间的转换;
int和Integer:完成字符串和整形之间的转换;
long和Long:完成字符串和长整形之间的转换;
flota和Float:完成字符串和单精度浮点值之间的转换;
double和Double:完成字符串和双精度浮点值的转换;
Date:完成字符串和日期类型之间的转换!;
数组:默认情况下,数组元素是字符串,如果用户提供了自定义类型转换器,也可以是其他复合类型转换器;
集合:默认情况下,假定集合元素为String,并创建一个新的ArrayList封装所有的字符串;

 

这样即使endtime是Date类型,也没问题的。

但是如果传进来带有非法字符的话,这里也会报错的,如age是int,而在页面传值是传了个字符串过来,这样肯定报错了。

 

 

有一种特殊的情况。

项目上有出现表现层使用实体类的情况,将实体类对象放到表单中获取数据,其中涉及到starttime的属性,这个属性是timestamp类型的。

在本地开发环境下,页面通过表单提交starttime的值到action是没问题的,这里应该是做了一次转换,将String转为了timestamp。

但是放到商用上,就报错上面的错误了。

后来将服务器的一个环境变量Lang改为了zh_CN.UTF-8,跟本地的一样,就没有报错了。原来的是en_US.UTF-8。

看得出是服务器的字符编码导致的。struts的转换是没问题的,猜测是不是两种字符编码的时间格式不一样呢?浏览器在本地,应该是中文的,服务器的应该也是中文才行。

需要进一步的验证。

 

 

 

 

 

 

  相关解决方案