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 把Request或ResultSet中的字符串绑定到对象的属性
经常要从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);
Jakarta-Commons- BeanUtils学习笔记:的更多相关文章
- BeanUtils学习笔记
一. 简介 BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行简化操作处理.一个JavaBean通常包含了大量的属性,很多情况下,对JavaB ...
- Apache Commons Math3学习笔记(2) - 多项式曲线拟合(转)
多项式曲线拟合:org.apache.commons.math3.fitting.PolynomialCurveFitter类. 用法示例代码: // ... 创建并初始化输入数据: double[] ...
- Digester学习笔记(二)转载
为便于理解,将笔记的内容结构作了一些调整. 对象栈 对digester技术最普通的应用,是用来动态创建一个由Java对象构成的树结构,各对象的属性以及对象间的关系,基于XML文档的内容来设置(XML文 ...
- Digester学习笔记(一)转载
本博文系转载,作者原文已经无法找到,感谢原作者的辛苦整理 Digester学习笔记(一) 在windows下开发程序,用M$提供的接口处理.ini文件或管理注册表的键值是非常方便的.在java平台上开 ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁
guava 学习笔记 使用瓜娃(guava)的选择和预判断使代码变得简洁 1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code- ...
- 史上最全的SpringMVC学习笔记
SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...
- springmvc学习笔记--支持文件上传和阿里云OSS API简介
前言: Web开发中图片上传的功能很常见, 本篇博客来讲述下springmvc如何实现图片上传的功能. 主要讲述依赖包引入, 配置项, 本地存储和云存储方案(阿里云的OSS服务). 铺垫: 文件上传是 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- jsp&servlet学习笔记
1.路径引用问题 一个css.jsp.html.或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才 ...
随机推荐
- nodejs中间层现实
初次接触nodejs,是一种非常神奇的东西,未来必火起来.个人觉得最大优势npm命令. 闲话少说,直入主题.这是一个博客项目,php最为服务端,提供数据给node:nodejs+express作为中间 ...
- Linux-Tcp-IP
/* tcpcli.c */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include ...
- 2016-10-31 reload
经历了创业公司的欠薪后,决定重新开始,从原本着力于如何快速入门与实现变更为巩固基础再出发. 2016-10-31
- C# 网页自动填表自动登录(转)
自动填表的方式有很多,关键是获取控件的id或者name. 比如源代码有 <input id="pwdInput" tabindex="2" class=& ...
- oracle 报“无效数字”异常和“ORA-01830: 日期格式图片在转换整个输入字符串之前结束”
1.问题1 执行下列SQL: sql = "select count(1) as totle from vhl_model_data a where a.OBTAIN_CREATE_TIME ...
- WordPress 全方位优化指南(上)
作为一个全面的 WordPress 性能优化教程,本文旨在帮助读者排查 WordPress 网站的性能问题,同时也提供网站前端优化加速的建议. 如果你曾经遇到过 WordPress 管理界面加载缓慢. ...
- UITableView.m:8042 crash 崩溃
CRASH : /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:804 ...
- EasyUI 调用getSelections方法只能获取到一行的原因
$('#tt').datagrid({ url: 'GetDataJosn', title: 'DataGrid', width: 800, height: 300, pageSize: 10, id ...
- 【网络流24题】No.1 搭配飞行员(飞行员配对方案问题)
[问题描述] 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞 ...
- 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)
[题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...