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));
}
}
beanUtils操作bean的属性的更多相关文章
- 使用BeanUtils操作Bean属性
package com.wzh.test.beanutils; import java.lang.reflect.InvocationTargetException; import java.text ...
- 内省操作javabean的属性
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...
- 【spring源码系列】之【Bean的属性赋值】
每次进入源码的世界,就像完成一场奇妙的旅行! 1. 属性赋值概述 上一篇讲述了bean实例化中的创建实例过程,实例化后就需要对类中的属性进行依赖注入操作,本篇将重点分析属性赋值相关流程.其中属性赋值, ...
- 按bean的属性值对list集合进行排序
List根据对象的某个属性排序工具类 List排序 import java.util.Collections; import java.util.Comparator; import java.uti ...
- 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式
本系列文章导航 从零开始学习jQuery (四) 使用jQuery操作元素的属性与样式 一.摘要 本篇文章讲解如何使用jQuery获取和操作元素的属性和CSS样式. 其中DOM属性和元素属性的区分值得 ...
- jQuery入门(2)使用jQuery操作元素的属性与样式
jQuery入门(1)jQuery中万能的选择器 jQuery入门(2)使用jQuery操作元素的属性与样式 jQuery入门(3)事件与事件对象 jQuery入门(4)jQuery中的Ajax()应 ...
- [原创]java WEB学习笔记103:Spring学习---Spring Bean配置:基于注解的方式(基于注解配置bean,基于注解来装配bean的属性)
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- JQuery 操作对象的属性值
通过JQuery去操作前台对象(div,span...)的属性是很常见的事情,本文就简单的介绍几种操作情形. 1):通过属性值去获取对象 2):用JQuery去修改对象的属性值 3):获取并修改对象的 ...
- Jquery中animate可以操作css样式属性总结
可以用 animate() 方法来操作所有 CSS 属性吗? 是的,几乎可以!不过,需要记住一件重要的事情:当使用 animate()时, 必须使用 Camel 标记法书写所有的属性名,比如,必须使用 ...
随机推荐
- HDU 4664 Triangulation【博弈论】
一个平面上有n个点(一个凸多边形的顶点),每次可以连接一个平面上的两个点(不能和已经连接的边相交),如果平面上已经出现了一个三角形,则不能在这个平面上继续连接边了. 现在总共有N个平面,每个平面上都有 ...
- uva 10003 Cutting Sticks (区间dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 打开 题目大意 一根长为l的木棍,上面有n个"切点",每个点的位置为c[i] 要按照一 ...
- schema文件中cube的事实表使用视图方法
在cube中可以使用查询结果或者视图来当做事实表,其中view的alias相当于表名,这个要和同一个cube中的level的表名对应,代码如下: <Cube name="YHZXZLF ...
- JavaScript引用类型之Array类型一
一.简介 除了Object之外,Array类型恐怕是ECMAScript中最常用的类型了.下面就来分析ECMAScript中的数组与其他语言中的数组的异同性: 1.相同点: (1)他们都是数据的有序列 ...
- C# 第三方控件 下面的Item不显示了
当高版本的第三方版本 替换成低版本的第三方后,item,不显示了之后,请试着再次在这基础上添加一个Item,观察这个Item和原来已经在的却不显示的Item的区别在哪里.然后去源程序正常文件哪里 将这 ...
- org.apache.solr.client.solrj.impl.HttpSolrServer$RemoteSolrException: Internal Server Error 错误
Solr报错: { "responseHeader": { "status": 500, "QTime": 11 }, "erro ...
- Hadoop学习之HBase和Hive的区别
Hive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样.在这种情况下,就需要Hive这样的用户编程接口.Hive ...
- Mysql 批量杀死进程
正常情况下kill id,即可,但是有时候某一异常连接特别多的时候如此操作会让人抓狂,下面记录下小方法: use information_schema; select concat('kill ',i ...
- Android 汉字转拼音之工具篇
/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Versi ...
- 几年前无聊小游戏之作_WEB版本打泡泡
几年前写的小东西 主要是H5画布的操作,还有个C语言基于WIN SDK开发的版本 找不到代码了 找到了再分享 <!DOCTYPE html> <script src="ga ...