CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  框架、开源

BeanUtils.copyProperties(target, o) 抛出异常org.apache.commons.beanutils.ConversionException

楼主zyhowe(★☆偶然的天空☆★)2005-06-01 20:21:13 在 Java / 框架、开源 提问

ActionForm:  
  public   class   BbsActionForm   extends   ActionForm   {  
        public   String   dt   =null;  
        public   void   setDt(String   dt)   {  
  this.dt   =   dt;  
        }  
   
        public   String   getDt()   {  
  return   this.dt;  
        }  
  }  
   
  Bbs.hbm.xml:  
  <property   column="dt"   length="20"   name="dt"   type="java.sql.Date"/>  
   
  Bbs.java:  
  public   class   Bbs   extends   BaseObject   {  
        public   java.sql.Date   dt   =   null;  
        public   void   setDt(java.sql.Date   dt)   {  
  this.dt   =   dt;  
        }  
        public   java.sql.Date   getDt()   {  
  return   this.dt;  
        }  
  }  
   
  Action:  
  把ActionForm转换为Bean:  
  Object   bbsForm   =   (Object)   form;  
  Bbs   bbs   =(Bbs)Normal.convertObjectForFormToBean(bbsForm);  
  bbsManager.Update(bbs);  
   
  其中Normal类:  
  public   static   Object   convertObjectForFormToBean(Object   o)   {  
  Object   target   =   null;  
  if   (o   ==   null)   {  
  target   =   null;  
  }   else   {  
  try   {  
  String   name   =   o.getClass().getName(); int   p   =   name.lastIndexOf("ActionForm"); name   =   name.substring(0,   p);  
  Class   obj   =   Class.forName(name);  
  target   =   obj.newInstance();                                                       BeanUtils.copyProperties(target,   o);  
  }   catch   (Exception   e)   {  
                                                                            System.out.println("Error:"+e.toString());  
                                                        }  
  }  
  return   target;  
  }  
   
  现在就是从string->java.sql.Date转换不过来,但反过来是完全可以的  
   
  问题点数:100、回复次数:11Top

1 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-01 20:27:36 得分 0

如果改Bbs.hbm.xml,Bbs.java的dt为java.util.Date则  
  java.lang.IllegalArgumentException:    
  Cannot   invoke   com.test.spring.Bbs.setDt   -   argument   type   mismatchTop

2 楼sgdb(神天月晓)回复于 2005-06-02 09:15:31 得分 20

BeanUtils对date的支持不是很好,好象只支持java.util.Date  
   
  很久   以前用过一次,虽然会报错,但是值已经都传递过去了  
   
  java.lang.IllegalArgumentException:    
  Cannot   invoke   com.test.spring.Bbs.setDt   -   argument   type   mismatch  
  应该跟BeanUtils无关吧Top

3 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-02 09:27:46 得分 0

sgdb(神天月晓)   ,THX!  
        java.lang.IllegalArgumentException:    
  Cannot   invoke   com.test.spring.Bbs.setDt   -   argument   type   mismatch  
  应该跟BeanUtils无关吧  
     
   
  但这个异常是copyProperties抛出来的  
  Top

4 楼myth822(↑八月的吟游者↑)回复于 2005-06-02 09:44:05 得分 20

BeanUtils好像不支持复杂类型的Top

5 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-02 10:44:57 得分 0

知道了,日期格式必须为  
  yyyy-mm-dd   (斜杠/   就会产生异常org.apache.commons.beanutils.ConversionException)  
   
  而且不能为空,继续处理中.........  
   
   
  Top

6 楼sgdb(神天月晓)回复于 2005-06-02 11:08:05 得分 20

public   void   setDt(java.sql.Date   dt)  
   
  public   void   setDt(String   dt)  
   
  这2个不一样啊,当然会出错了Top

7 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-02 11:10:16 得分 0

一个是Bean,一个是ActionForm  
  当然不一样了  
  Top

8 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-02 11:11:17 得分 0

怎么处理null或者""的情况呢?Top

9 楼zyhowe(★☆偶然的天空☆★)回复于 2005-06-02 16:36:39 得分 0

终于搞定,总结于下:  
  1.ActionForm:  
            String   dt;  
  2.Bbs.hbm.xml:  
            java.sql.Date  
  3.Bbs.java:  
            java.sql.Date   dt;  
  4.ActionForm->Bean:  
      放弃了原来那个BeanUtils.copyProperties(dst,src);  
   
      改用如下方法:  
  /**  
    *转换字符为java.sql.Date  
    *@param   str   字符型日期数据  
    *@param   format   格式化模式  
    *@return     返回日期  
    */  
  public   static   java.sql.Date   formatSqlDate(String   str,   String   format)   {  
  Date   date   =null;  
                    try   {  
  DateFormat   df   =   new   SimpleDateFormat(format);  
  date   =   (Date)   df.parse(formatString(str).replaceAll("-",   "/"));  
  }   catch   (Exception   e)   {  
  }  
                    if(date!=null){  
        long   t   =   date.getTime();  
        return   new   java.sql.Date(t);  
  }else  
        return   null;  
  }  
   
  /**  
  *转换ActionForm为Bean  
  *@param   src   源form  
  *@param   dst   目标bean  
  *@param   field[]   要替换的日期字段列表  
  *@return   返回转换后的bean  
  */  
  public   static   Object   convertObjectForStringToSqlDate(Object   src,Object   dst,String   field[]){  
      String   fieldName=",";  
      for(int   i=0;i<field.length;i++)  
            fieldName+=field[i]+",";  
           
      if   (src   ==   null)   {  
            dst   =   null;  
      }   else   {  
            PropertyDescriptor   origDescriptors[]   =PropertyUtils.getPropertyDescriptors(src);  
            for   (int   i   =   0;   i   <   origDescriptors.length;   i++)   {  
  String   name   =   origDescriptors[i].getName();  
  if   (PropertyUtils.isWriteable(dst,   name))  
      try   {  
            String   dateValue   =(String)PropertyUtils.getSimpleProperty(src,   name);  
                              if   ((","+name+",").indexOf(fieldName)>=0)    
  BeanUtils.setProperty(dst,name,formatSqlDate(dateValue,"yyyy/MM/dd"));  
            else  
  PropertyUtils.setSimpleProperty(dst,name,dateValue);  
      }   catch   (Exception   e)   {  
      }  
              }  
      }  
      return   dst;  
  }  
   
  欢迎改善意见!Top

10 楼sgdb(神天月晓)回复于 2005-06-02 17:22:31 得分 20

晕,越搞越麻烦,要是字段不多的话还不如不要用BeanUtils之类Top

11 楼humanity(城市边缘的狼)回复于 2005-06-02 21:48:22 得分 20

我记得我用   Digester   解析   XML   时   有个   注册转换器的   方法,   不知道   你这里有没有这种可能性?  
  Top

相关问题

  • apache?
  • apache
  • ★->★★ ^o^
  • ▲▲▲▲▲->★ ^o^
  • .......O...........O..................O.......................O.......O..O
  • 请问各位大侠,如何将.o程序发布到apache下,并能让客户端可以访问呢?
  • apache+tomcat
  • About Apache!
  • apache+asp
  • apache RewriteRule

关键词

  • bbs
  • date
  • xml
  • sql
  • null
  • beanutils
  • setdt
  • dt
  • actionform
  • dst

得分解答快速导航

  • 帖主:zyhowe
  • sgdb
  • myth822
  • sgdb
  • sgdb
  • humanity

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo