ognl.MethodFailedExceptiond异常的解决办法(Struts2)

问题描述:

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;)]

       at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:823)

       at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:964)

       at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:75)

       at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

       at java.lang.Thread.run(Unknown Source)

/--------------------------------------/

expr: money val: [Ljava.lang.String;@1f87254 context: ognl.OgnlContext@d0a0b718 root:[com.yakoo5.cdhms.action.SaleManageAction@221c75, com.opensymphony.xwork2.DefaultTextProvider@618533] value: [Ljava.lang.String;@1f87254

 

注: money SaleManageAction 的一个属性字段 ,float 类型 .

 

解决办法:

money 的类型修改为 Float 类型 ( 包装类型 ) ,并且 getter setter 方法的返回类型和参数类型都要修改成 Float 类型。即可解决此问题。

还有,如果你要传递的参数时 Struts2 Action 的属性对象的子属性,如: SaleManageAction.SaleRecord.money money float 类型,最好也改成 Float 类型,不然会报同样的错误。

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

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值