处理异常ognl.MethodFailedException setDate

struts2有默认的类型转的,基本类型都可以转换的:

boolean和Boolean:完成字符串和布尔值之间的转换;

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

 

异常1、在 Struts2 里面,当页面向服务器提交参数时报 ognl.MethodFailedException 和 java.lang.NoSuchMethodException: setMoney([Ljava.lang.String;)] 异常,实际上 money 并不是 String 类型,而是 float 类型或者其他类型,但是参数值却仍能够正确传递过去。

ognl.MethodFailedException: Method "setMoney" failed for object com.yakoo5.cdhms.action.SaleManageAction@221c75 [java.lang.NoSuchMethodException: setMoney([Ljava.lang.String;)]

解决方法:

将 money 的类型修改为 Float 类型 ( 包装类型 ) ,并且 getter , setter 方法的返回类型和参数类型都要修改成 Float 类型。即可解决此问题。
还有,如果你要传递的参数时 Struts2 的 Action 的属性对象的子属性,如: SaleManageAction.SaleRecord.money , money 是 float 类型,最好也改成 Float 类型,不然会报同样的错误。

建议: 只要从页面传递的参数是 Struts2 的 Action 的属性或者属性对象的子属性,都把它们的类型从原始类型 (int,float,double) 修改改成包装类型 (Integer,Float,Double) ,当然它们的 setter 和 getter 方法的参数和返回值也要修改成包装类型,这样就可以避免不必要的此类异常。

 

异常2、Date类型转换失败,警告信息:Error setting expression 'date' with value '[Ljava.lang.String;@1ee5b36'ognl.MethodFailedException: Method "setDate" failed for object com.shengsiyuan.struts2.LoginAction@138b4ed [java.lang.NoSuchMethodException:

 

解决方法:

分析原因为从JSP页面传过来的String值2011-10-10末能正确的转换为Date类型的值。
但结果还是能“较正确的显示”,如下:

后经查询(http://www.iteye.com/problems/38729),得知,问题的确出在JSP页面上的输入格式上,正确格式为:月/日/年,如(07/05/2012)
现在的输出为:
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能体格

你的鼓将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值