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