城市猎人

在一网情深的日子里,谁能说得清是苦是甜,只知道确定了就义无反顾
posts - 1, comments - 7, trackbacks - 0, articles - 89

BeanUtils日期转换

Posted on 2009-03-24 12:26 sailor 阅读(1028) 评论(0)  编辑  收藏 所属分类: 心得体会java
        经过一天测试,终于实现了BeanUtils从String类型到Timestamp成功转换。底层是如何实现的,还没彻底了解,先将解决方案记录下来,以后再去看底层如何实现。
           1、写一个日期转换器,这个转换器实现了Converter接口
 1public class DateConvert implements Converter {
 2        private Logger log = Logger.getLogger(DateConvert.class);
 3        static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");// HH:mm:ss
 4        private String datePattern = "yyyy-MM-dd";
 5
 6        public DateConvert() 
 7            
 8        }
 
 9        
10        public DateConvert(String datePattern)
11        {
12            this.datePattern = datePattern;
13        }

14    
15        /**
16         *  @type  需要被转换的类型
17         *  @value 被转换的值
18         */

19        public Object convert(Class type, Object value) 
20            
21            if(value==null)
22                 return null
23            
24            if(((String)value).trim().length()==0)
25                return null
26            
27            if(value instanceof String) 
28                try 
29                    //解析接收到字符串 
30                    return TimestampUtil.parseTimestamp((String)value,datePattern);   //自己写的封装,得到一个Timestamp实例
31                    
32                }
 catch (Exception ex) {
33                    //发生解析异常
34                    throw new ConversionException("输入的日期类型不合乎" + datePattern + "格式" + value.getClass()); 
35                }
 
36            }
 else 
37                //其他异常 
38                throw new ConversionException("输入的不是字符类型" + value.getClass()); 
39            }
 
40        }

41}

        2、自己重写了一个BeanUtil,用于实现拷贝request传递来的参数到Model里面,里面注册了一个日期处理监听,这个组件还有待改进
 1public class BeanUtil {
 2
 3    public void copyBean(){};
 4    
 5    /**
 6     * 将request里的参数封装到一个Bean。如果bean里面有日期型,只是java.sql.Date,java.sql.TimeStamp类型
 7     * @param request
 8     * @param bean
 9     * @throws IllegalAccessException
10     * @throws InvocationTargetException
11     */

12    public static void copyRequestPrameterToModel(HttpServletRequest request, Object bean) throws IllegalAccessException, InvocationTargetException{
13        Map map = getRequestPrameters(request);
14        
15        if(map == null)
16            return ;    
17        
18        ConvertUtils.register(new DateConvert(), java.sql.Timestamp.class); //注册监听
19        BeanUtils.populate(bean, map);
20    }
;
21    
22    /**
23     * 从request中取出key和value封装到Map里
24     * @param request
25     * @return
26     */

27    private static Map<String,Object> getRequestPrameters(HttpServletRequest request)
28    {
29        Map<String,Object> map = new HashMap<String,Object>();
30        
31        Enumeration enuma = request.getParameterNames();
32        while(enuma.hasMoreElements())
33        {
34            String key = (String)enuma.nextElement();
35            
36            String value = (String)request.getParameter(key);    //获取value
37            
38            //如果值为空的话,就不插入map里
39            if(null == value || "".equals(value))
40            {
41                continue;
42            }

43            
44            map.put(key, request.getParameter(key));
45        }

46        
47        return map;
48    }

49}

 

   


只有注册用户登录后才能发表评论。


网站导航: