copyProperties()好象不行,你要那样做的话估计只有手工set了

解决方案 »

  1.   

    你可以自己封装一下BeanUtils,通过ConvertUtils来注册数据类型的转换类
    BeanUtilEx.java
    -----------------------------------------------
    package com.maifei.util.beanutil;import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.beanutils.BeanUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;import java.util.HashMap;
    import java.util.Map;/**
     * <p>Title: </p>
     * <p>Description: citysir's library</p>
     * <p>Copyright: Copyright (c) 2003</p>
     * <p>Company: toone</p>
     *
     * @author citysir
     * @version 1.0
     */
    public final class BeanUtilEx extends BeanUtils{    private static Map cache = new HashMap();
        private static Log logger = LogFactory.getFactory().getInstance(BeanUtilEx.class);    private BeanUtilEx() {
        }    //update by zhuzf at 2004-9-29
        static {
            //注册sql.date的转换器,即允许BeanUtils.copyProperties时的源目标的sql类型的值允许为空
            ConvertUtils.register(new SqlDateConverter(), java.sql.Date.class);
            //ConvertUtils.register(new SqlTimestampConverter(), java.sql.Timestamp.class);
            //ConvertUtils.register(new UtilDateConverter(), java.util.Date.class);
        }    public static void copyProperties(Object source, Object target) {
            //update bu zhuzf at 2004-9-29
            //支持对日期copy
            try {
                org.apache.commons.beanutils.BeanUtils.copyProperties(target, source);
            } catch (Exception e) {
                logger.error("拷贝对象出错!", e);        }
        }}SqlDateConverter.java
    -----------------------------------------------
    package com.maifei.util.beanutil;import org.apache.commons.beanutils.ConversionException;
    import org.apache.commons.beanutils.Converter;/**
     * java.sql.date 转换器,供ConvertUtils注册使用
     * User: zhuzf
     * Date: 2004-9-29
     * Time: 9:57:22
     */
    public class SqlDateConverter implements Converter {
        public Object convert(Class type, Object value) {
            //如果value为空的话,则返回空,不抛出异常
            if (value == null || value.toString().length() < 1) {
                return null;
            } else {
                //如果是java.sql.Date
                if (value instanceof java.sql.Date) {
                    return (value);
                }            try {
                    return (java.sql.Date.valueOf(value.toString()));
                } catch (Exception e) {
                    try {
                        java.util.Date aDate = null;
                        //4位数年份 例如:1980
                        if (value.toString().length() == 4) {
                            aDate = DateUtil.parse(value.toString(), "yyyy");
                            return new java.sql.Date(aDate.getTime());
                        } else {
                            aDate = DateUtil.parse(value.toString(), "yyyy-MM-dd hh:mm:ss");
                            return new java.sql.Date(aDate.getTime());
                        }
                    } catch (Exception ex) {
                        throw new ConversionException(ex);
                    }            }
            }    }
    }
      

  2.   

    搞定了,直接把beanUtils的源码拿出来用,加了其中一句:
    if(value==null) continue;
    呵呵,管用了!