大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > beanUtils操作bean的属性

beanUtils操作bean的属性

关键词:属性操作beanUtilsbean  阅读(673) 赞(10)

[摘要]beanUtils操纵bean属性:

beanUtils操纵bean属性:

需要jar包commons-beanutils-x.x.x.jar
同时commons-beanutils-x.x.x.jar需要commons-logging.jar日志记录器来支持
所以用beanUtils的时候需要导入两个jar包
例:

javaBean:

 import java.util.Date;
 
 /**
  * 
  * @功能:javaBean
  * 
  * @日期:2013-10-24
  * 
  */
 public class Person {
 
     private String name;
     private int age;
     private Date birthday;
     
     public Date getBirthday() {
         return birthday;
     }
 
     public void setBirthday(Date birthday) {
         this.birthday = birthday;
     }
     
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public int getAge() {
         return age;
     }
     public void setAge(int age) {
         this.age = age;
     }
     
 }

测试类:

 import java.lang.reflect.InvocationTargetException;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.ConversionException;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.beanutils.Converter;
 import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
 import org.junit.Test;
 
 /**
  * 
  * @功能:BeanUtils
  * 
  * @日期:2013-10-24
  */
 public class BeanUtilsTest {
 
     @Test
     public void test1() throws IllegalAccessException, InvocationTargetException{
         Person p = new Person();
         
         String name = "张三";
         String age = "25";
         String date = "1988-01-04";
         /*
          * beanutils操纵bean的属性如下,
          * 第一参数传一个对象,第二个参数为所操作属性的名称,第三个参数为操作的属性的值
          * beanutils可以将属性类型自动转换成javaBean里的属性类型(只限于8种基本数据类型)
          * 想要将复杂类型的属性转换成其他型则需要注册一个转换器来实现
          * test2()为实现String转换为Date的测试过程
          */
         BeanUtils.setProperty(p, "name", name);
         BeanUtils.setProperty(p, "age", age);
         //如果将String类型的日期用如下方式来设置bean的属性,不会转换成功,会报出如下错误
         //BeanUtils.setProperty(p, "birthday", date);
         /*
          * 2013-10-24 14:48:34 org.apache.commons.beanutils.converters.DateConverter toDate
          *警告:     DateConverter does not support default String to 'Date' conversion.
          *2013-10-24 14:48:34 org.apache.commons.beanutils.converters.DateConverter toDate
          *警告:     (N.B. Re-configure Converter or use alternative implementation)
          */
         System.out.println(p.getName());
         System.out.println(p.getAge());
 //        System.out.println(p.getBirthday());
     }
     
     /**
      * 
      * @功能:在没有相应自动转换的时候需要注册一个转换器来转换想要的类型
      *             test2()为一个自定义的转换器,作为例子来写
      *             注:Apache已经写好了一些转换器,需要的时候看看文档converter下有没有想要的转换器
      *                 test3()介绍了date转换的转换器,只需要注册一下即可
      * @throws IllegalAccessException
      * @throws InvocationTargetException
      * @日期:2013-10-24
      */
     @Test
     public void test2() throws IllegalAccessException, InvocationTargetException{
         //注册一个String类型到Date类型的转换器
         //通过查看API文档,可知Converter是一个接口,需要实现其方法,第二个参数为想要转换成的数据类型
         ConvertUtils.register(new Converter() {
             
             public Object convert(Class type, Object value) {
                 
                 //判断是不是String类型的数据,不是则抛出异常
                 if(!(value instanceof String)){
                     throw new ConversionException("不是String数据类型!");
                 }
                 //是String的话,把Object的value强转成String
                 String strValue = (String) value;
                 //判断是不是一个空字符串
                 if(strValue.trim().equals("")){
                     return null;
                 }
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 try {
                     return sdf.parse(strValue);
                 } catch (ParseException e) {
                     throw new RuntimeException(e);
                 }
             }
         }, Date.class);
         
         Person p = new Person();
         String date = "1988-09-23";
         BeanUtils.setProperty(p, "birthday", date);
         System.out.println(p.getBirthday());
     }
     
     /**
      * 使用框架里已定义好的转换器
      * @throws InvocationTargetException 
      * @throws IllegalAccessException 
      * 
      */
     @Test
     public void test3() throws IllegalAccessException, InvocationTargetException{
         Person p = new Person();
         String date = "1980-03-04";
         //注册一个转换器,将String类型的date转为Date型
         ConvertUtils.register(new DateLocaleConverter(), Date.class);
         BeanUtils.setProperty(p, "birthday", date);
         //.toLocaleString()转为需要的日期格式
         System.out.println(p.getBirthday().toLocaleString());
     }
     /*
      * 注:虽然,可以用已经写好的转换器,但是这个写好的转换器存在一个问题,就是date为空的时候,
      * 它检测不到,运行时会抛出异常,所以最好自己学会去写一个转换器
      */
     
     
     /**
      * 用map集合中的值,填充bean的属性值
      * @throws Exception 
      * @throws IllegalAccessException 
      */
     @Test
     public void test4() throws IllegalAccessException, Exception{
         Person p = new Person();
         Map map = new HashMap();
         map.put("name", "张三");
         map.put("age", "24");
         map.put("birthday", "1978-09-27");
         //注册一个日期转换器
         ConvertUtils.register(new DateLocaleConverter(), Date.class);
         //将map集合中的值填充到bean的属性,map的key值必须要与bean的属性相同才能填充进去
         BeanUtils.populate(p, map);
         System.out.println("name:" + p.getName() + "\r\n" + "age:" + p.getAge() + "\r\n" + "birthday:" + p.getBirthday().toLocaleString().substring(0,10));
     }
 }


相关评论