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));
}
}

beanUtils操作bean的属性的更多相关文章

  1. 使用BeanUtils操作Bean属性

    package com.wzh.test.beanutils; import java.lang.reflect.InvocationTargetException; import java.text ...

  2. 内省操作javabean的属性

    import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...

  3. 【spring源码系列】之【Bean的属性赋值】

    每次进入源码的世界,就像完成一场奇妙的旅行! 1. 属性赋值概述 上一篇讲述了bean实例化中的创建实例过程,实例化后就需要对类中的属性进行依赖注入操作,本篇将重点分析属性赋值相关流程.其中属性赋值, ...

  4. 按bean的属性值对list集合进行排序

    List根据对象的某个属性排序工具类 List排序 import java.util.Collections; import java.util.Comparator; import java.uti ...

  5. 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式

    本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...

  6. jQuery入门(2)使用jQuery操作元素的属性与样式

    jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...

  7. [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  8. JQuery 操作对象的属性值

    通过JQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形. 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3):获取并修改对象的 ...

  9. Jquery中animate可以操作css样式属性总结

    可以用 animate() 方法来操作所有 CSS 属性吗? 是的,几乎可以!不过,需要记住一件重要的事情:当使用 animate()时, 必须使用 Camel 标记法书写所有的属性名,比如,必须使用 ...

随机推荐

  1. C++_bool

    1 0 #include <iostream> using namespace std; void main() { && || || - && ; std ...

  2. selector是在文件夹drawable中进行定义的xml文件。

    获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...

  3. 关于 FPGA 和 外部芯片接口时序设计

    在看这篇文章之前, 建议先好好读下这篇文章.http://download.csdn.net/detail/angelbosj/8013827. 因为我不太会用 VISio.要是哪位网友能告诉我.怎么 ...

  4. 第一个输出程序 Console.WriteLine

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. realloc,c语言

    realloc #include <stdlib.h> main() { char* ptr=NULL; char* ptr2=NULL; ptr = malloc(); printf(& ...

  6. qt学习:信号,槽

    [C.GUI.Qt.4编程(第二版)](加)布兰切特,(英)萨默菲尔德.扫描版[学习库www.xuexi111.com].pdf 信号和槽是Qt编程的基础,它可以让各种对象联系在一起. 1. 使用co ...

  7. Hbase Region Server 启动失败

    错误如下:Master rejected startup because clock is out of sync org.apache.hadoop.hbase.ClockOutOfSyncExce ...

  8. Streams Studio配置Build options

    Defining build options You can change the build options of the internal builder for building an SPL ...

  9. Java处理java.util.ConcurrentModificationException异常

    代码: public static void reduce(HashMap<String, Integer> hashMap, final Integer count) { Iterato ...

  10. 如何从 0 开始学 ruby on rails (漫步版)

    如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对  rails 感兴 ...