zoukankan      html  css  js  c++  java
  • Jakarta-Commons- BeanUtils学习笔记:

    http://www.cnblogs.com/zhangyi85/archive/2009/04/22/1441341.html

    1.什么是BeanUtils

    BeanUtils主要提供了对于JavaBean进行各种操作。

    2.BeanUtils的作用:

    在一般的写bean组件的时候,都必须要写setter和getter方法,当然假如我们事先已经知道bean的相关属性和方法,写bean是比较简单的,但是组件太多的时候,重复编写经常是枯燥乏味令人厌烦的。但当有些时候我么需要调用动态对象的属性的时候,我们应该怎么来设定和获取对象的属性呢?BeanUtils就可以帮助我们来解决这个问题。它需要Jakarta-Commons -Collections包和Jakarta-Commons -logging包的支持。

    3. org.apache.commons.beanutils

    这个包主要提供用于操作JavaBean的工具类,Jakarta-Common-BeanUtils的主要功能都在这个包里实现。

    BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:

           1Simple——简单类型,如Stirng、Int……

      (对于Simple类型,第二个参数直接是属性名即可,详见代码)

           2Indexed——索引类型,如 数组、arrayList……

          (对于Indexed,则为“属性名[索引值]”,注意这里对于ArrayList和数组都可以用一样的方式进行操作,详见代码)

           3Maped——这个不用说也该知道,就是指Map,比如HashMap……

           (对于Map类型,则需要以“属性名(key值)”的形式,详见代码)

        访问不同类型的数据可以直接调用函数getProperty和setProperty。它们都只有2个参数,第一个是JavaBean对象,第二个是要操作的属性名。

     

    4.Converter RequestResultSet中的字符串绑定到对象的属性 
       经常要从request,resultSet等对象取出值来赋入bean中,如果不用MVC框架的绑定功能的话,下面的代码谁都写腻了。
    String a = request.getParameter("a");   bean.setA(a);  

    String b = request.getParameter("b");  bean.setB(b);

    不妨写一个Binder自动绑定所有属性:

    MyBean bean = ;
    
            HashMap map = new HashMap();
    
            Enumeration names = request.getParameterNames();
    
            while (names.hasMoreElements())
    
            {
    
              String name = (String) names.nextElement();
    
              map.put(name, request.getParameterValues(name));
    
            }
    
         BeanUtils.populate(bean, map);
    

      

     其中BeanUtils的populate方法(Struts用于将一个map的值填充到一个bean中)或者getProperty,setProperty方法其实都会调用convert进行转换。
         但Converter只支持一些基本的类型,甚至连java.util.Date类型也不支持。而且它比较笨的一个地方是当遇到不认识的类型时,居然会抛出异常来。 对于Date类型,我参考它的sqldate类型实现了一个Converter,而且添加了一个设置日期格式的函数。
    要把这个Converter注册,需要如下语句:

     

    //因为要注册converter,所以不能再使用BeanUtils的静态方法了,必须创建BeanUtilsBean实例:

    BeanUtilsBean beanUtils =
    
                new BeanUtilsBean( convertUtils, new PropertyUtilsBean() ) ;
    
            beanUtils.setProperty( bean, name, value ) ;
    

      

    5.BeanUtils在Struts中的应用:

    下面的代码是我们经常在Struts中为了获得浏览器带来的参数的方法:

    DynaActionForm daf = (DynaActionForm)form ;
    
            User user = new User() ;
    
            user.setId( daf.getString( "id" ) ) ;
    
            user.setPassword( daf.getString( "password" ) ) ;
    
            user.setUsername( daf.getString( "password" ) ) ;
    

      

    是不是觉得每次写这些都是在重复造轮子呢?

    在看看用BeanUtils写的:

    BeanUtils.copyProperties( user, daf ) ;
    

      

    就是这么简单

     

    6.实例

    public class Test {
    
        private String name; 
    
        private HashMap address = new HashMap(); 
    
        private String[] otherInfo; 
    
        private ArrayList product; 
    
        private ArrayList employee; 
    
        private HashMap telephone;
    
    省略get/set
    
    }
    

      

    MainClass:

    Jakarta-Commons- BeanUtils1.8.jar+JDK1.5

    package com.cache.domain ;
    
     
    
    import java.util.HashMap ;
    
     
    
    import org.apache.commons.beanutils.BeanUtils ;
    
     
    
    /**
    
     * @Author:Tony.Zhang setpsw@gmail.com Apr 22, 2009 1:34:16 PM
    
     */
    
    public class MainClass {
    
     
    
        /**
    
         * @param args
    
         * @throws Exception
    
         */
    
        public static void main( String[] args ) throws Exception{
    
            Test test = new Test();
    
            test.setName( "zhangyi" );
    
            // BeanUtils.getProperty( bean, name )
    
            // 动态取得
    
            System.out.println(BeanUtils.getProperty( test, "name" ));
    
            
    
            HashMap map = new HashMap();
    
            map.put( "1", "13880808080" );
    
            map.put( "2", "13550505050" );
    
            // BeanUtils.setProperty( bean, name, value )
    
            BeanUtils.setProperty( test, "telephone", map );
    
            // 动态取得
    
            System.out.println(BeanUtils.getProperty( test, "telephone(1)" ));
    
           
    
            /**
    
             * 直接进行Bean之间的clone 复制后的2个Bean的同一个属性可能拥有同一个对象的ref,
    
             * 这个在使用时要小心,特别是对于属性为类的情况。
    
             */
    
            Test test2 = new Test();
    
            BeanUtils.copyProperties( test2, test );
    
            System.out.println(BeanUtils.getProperty( test2, "name" ));
    
            
    
        }
    
    }
    

      

    注:以上实例使用

    其余的功能大家继续挖掘吧,可以参考官方API的说明J

    ConvertUtilsBean convertUtils = new ConvertUtilsBean();
    
            DateConverter dateConverter = new DateConverter();
    
            convertUtils.register(dateConverter,Date.class);
    

      

     

     

     

     

  • 相关阅读:
    POJ2635-The Embarrassed Cryptographer-大整数素因子
    poj2115-C Looooops -线性同余方程
    POJ1942-Paths On a Grid-组合数学
    poj1850-CODE-组合
    POJ1019-Number Sequence-数数。。
    CF-Contest339-614
    POJ3252-RoundNumbers-排列组合
    睡前小dp-poj3254-状压dp入门
    AC自动机-HDU3065-简单题
    python学习笔记 day32 实现网盘上传下载功能
  • 原文地址:https://www.cnblogs.com/a757956132/p/4649484.html
Copyright © 2011-2022 走看看