现在的位置: 首页 > 综合 > 正文

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

2013年09月28日 ⁄ 综合 ⁄ 共 1327字 ⁄ 字号 评论关闭



问题描述:


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
方法的参数和返回值也要修改成包装类型,这样就可以避免不必要的此类异常。

 

抱歉!评论已关闭.