日期:2014-05-20  浏览次数:21271 次

Struts2 报错,极度郁闷了
下面我就只贴出关键错误信息出来,帖多了也是无用;
ognl.MethodFailedException: Method "setAsLimbsCause" failed for object com.zhi.ds.pojo.ClAssess@1192e9 [java.lang.NoSuchMethodException: setAsLimbsCause([Ljava.lang.String;)]
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:823)

java.lang.NoSuchMethodException: setAsLimbsCause([Ljava.lang.String;)
at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:810)


这是我在一个页面上填写信息后,点击提交保存后报错的;
上面的错误信息真是搞不懂了。那个方法明明就在pojo中定义了,却硬要说没这个方法。而且
setAsLimbsCause([Ljava.lang.String;) 这个地方,中的参数,定义的是 Short类型,可显示却为String,还在Java前面加个L。总共报了很多个字段的错误,而且全都是一个错误模式。极度郁闷........

如果硬要我贴多些信息的话,待会告诉我,我把那些看着就恶心的多得像蚂蚁一样的错误信息都贴出来。。。

------解决方案--------------------
你调的那个方法不要带参数,参数名写外面,在写get,set方法,你那个方法里面直接this。get
------解决方案--------------------
你是不是xxx!method.action?
------解决方案--------------------
这个异常的意思是说,setAsLimbsCause(String arg)这样的一个方法没找到。
很显然嘛,你定义的是byte型参数的方法。
你数据库里是什么类型?
------解决方案--------------------
类型不匹配
------解决方案--------------------
你提交的时候把方法传入到Action里面,传入参数的用 “! ” 这样做了 设一个断点 看进去了没有。 如果进去了 就是你义务逻辑有问题。
------解决方案--------------------
应该是类型不对。画面是String,后台是什么类型。
------解决方案--------------------
setAsLimbsCause 方法参数类型不对。你action中的setAsLimbsCause方法参数类型应该不是String
------解决方案--------------------
类型不匹配 看看数据库里面的类型咯
------解决方案--------------------
参数类型不匹配。pojo全部改用string,在处理类里面去改类型就没这么多麻烦啦
------解决方案--------------------
看看你页面是怎么传递值的, Struts2 调用的那个方法的参数是 String[] ,(打印 double[].class 看看是
什么类型, 呵呵会有惊喜哦)

将整个表单都贴一下, 将 Action 对应字段与非默认的 getter/setter 贴一下;
如果有用自定义转换器也贴下...
:)
------解决方案--------------------
自定义个类型转换器
Java code

import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class ShortConverter extends DefaultTypeConverter {
    
    @SuppressWarnings("unchecked")
    public Object convertValue(Map<String, Object> context, Object value,
            Class toType) {
        if (toType==Short.class) {
            String[] params = (String[]) value;
            return Short.parseShort(params[0]);
        }else if (toType==String.class) {
            return ((Short) value).toString();
        }else{
            return null;
        }
    }

}

------解决方案--------------------
你的Action中有cla这个属性么?
------解决方案--------------------
拦截器配了吗 
从页面传后台都是String 之所以能变成不同的类型 是因为有拦截器

------解决方案--------------------
楼主有点不负责任呢,我辛苦给写了个类型转换器,是楼主没试还是有错阿,好歹给了答复!
------解决方案--------------------
数据库中是什么类型?