问题描述:
在 Struts2 里面,当页面向服务器提交参数时报ognl.MethodFailedException:和java.lang.NoSuchMethodException:异常
异常信息 :
Error setting expression 'itemList[0].menge ' with value '[Ljava.lang.String;@195575f'
ognl.MethodFailedException: Method "setMenge" failed for object PartOrderItem [id=null, menge=null, partLgort=null, partOrder=null] [java.lang.NoSuchMethodException: com.ns.extra.bean.PartOrderItem.setMenge([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1265)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at com.opensymphony.xwork2.ognl.accessor.ObjectAccessor.setProperty(ObjectAccessor.java:28)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:301)
at ognl.Ognl.setValue(Ognl.java:737)
at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:198)
。
。
。
Caused by: java.lang.NoSuchMethodException: com.ns.extra.bean.PartOrderItem.setMenge([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1206)
... 65 more
/-- Encapsulated exception ------------
java.lang.NoSuchMethodException: com.ns.extra.bean.PartOrderItem.setMenge([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1206)
at ognl.OgnlRuntime.setMethodValue(OgnlRuntime.java:1454)
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:85)
。
。
。
注: menge是 PartOrderItem类的一个属性字段 ,int类型 . 。
问题原因:是数据的类型不对
解决办法:
1、将 menge的类型修改为 Integer类型 ( 包装类型 ) ,并且 getter , setter 方法的返回类型和参数类型都要修改成 Integer类型。即可解决此问题。
还有,如果你要传递的参数时 Struts2 的 Action 的属性对象的子属性,最好也改成 包装 类型,不然会报同样的错误。
2、在请求地址的参数中 http://127.0.0.1:8080/newEbarcode/partOrder!savePartOrder.action?bean.vbeln=25425&bean.name=hgjhg&bean.mark=hgfjhgfh&itemList[0].partLgort.matnr =354&itemList[0].menge = 0&itemList[0].partLgort.lgort =354355&itemList[0].partLgort.describe = 参数名后面切记不可加空格(String类型除外),否则也汇报这个错
建议: 只要从页面传递的参数是 Struts2 的 Action 的属性或者属性对象的子属性,都把它们的类型从原始类型 (int,float,double) 修改改成包装类型 (Integer,Float,Double) ,当然它们的 setter 和 getter 方法的参数和返回值也要修改成包装类型,这样就可以避免不必要的此类异常。