2010-10-27 9:12:22 org.apache.commons.beanutils.PropertyUtilsBean invokeMethod
严重: Method invocation failed.
java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
……
2010-10-27 9:12:22 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.IllegalArgumentException: Cannot invoke com.zhdz.vo.CProduct.setCdate - argument type mismatch
at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:1778)
at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1759)由date类型引发的argument type mismatch异常怎么解决?

解决方案 »

  1.   

    你的date是java.util.date 还是 java.sql.date?你写的方法在调用date的时候参数传递是否合法?
      

  2.   

    vo类是java.util.date
    jsp页面传的是"yyyy-MM-dd"格式的字符串
    实现类里用的是
    pstm.setTimestamp(3, new Timestamp(cp.getCdate().getTime()));

    pstm.setDate(3, new java.sql.Date(cp.getCdate().getTime()));
    都出现以上异常
      

  3.   

    vo:private Date cdate;
    public Date getCdate() {
    return cdate;
    }
    public void setCdate(Date cdate) {
    this.cdate = cdate;
    }
    实现类:public boolean doCreate(CProduct cp) throws Exception {
    // TODO Auto-generated method stub
    boolean flag = false;
    String sql="insert into cproduct (ctype,ccount,cdate) values (?,?,?)";
    PreparedStatement pstm = this.dbc.getConnection().prepareStatement(sql);
    pstm.setString(1, cp.getCtype());
    pstm.setInt(2, cp.getCcount());
    pstm.setTimestamp(3, new Timestamp(cp.getCdate().getTime()));
    int count = pstm.executeUpdate();
    if(count>0){
    flag=true;
    }
    return flag;
    }
      

  4.   


    不同类型之间的date需要转换的,省事的方法是写一个convert转换器在代码中自己转换也可以,不过涉及到更低层的一些信息
      

  5.   

    解决方案:1、struts 动态上传文件使用<html:file>标签时,form标签需要加 enctype="multipart/form-data" 属性设置2、查看页面数据类型,例如:form 中的字段定义成Date 类型,页面也会出错,可改为:private Date brithday;
    public String getBrithday() {
       return new SimpleDateFormat("yyyy-MM-dd").format(brithday);
    }public void setBrithday(String brithday) throws ParseException {
       this.brithday = new SimpleDateFormat("yyyy-MM-dd").parse(brithday);
    }以后得注意了。