BeanUtils
BeanUtils是Apache Commons组件的成员之一,
主要用于简化JavaBean封装数据的操作。
简化反射封装参数的步骤,给对象封装参数。
好处: BeanUtils给对象封装参数的时候会进行类型自动转换。
需要导入三个jar包:
版本1:
commons-beanutils-1.9.3.jar //工具核心包
commons-collections-3.2.2.jar//增强的集合包
commons-logging-1.2.jar//日志记录包
版本2:
commons-beanutils-1.8.0.jar
commons-logging-1.1.1.jar
JavaBean
JavaBean就是一个类,但该类需要满足以下三个条件:
- 类必须使用public修饰。
- 提供无参数的构造器。
- 提供getter和setter方法访问属性。
JavaBean中注意点
字段:就是成员变量,字段名就是成员变量名。
属性:属性名通过setter/getter方法去掉set/get前缀,首字母小写获得(同el表达式的取值方式),
javabean中的成员属性要和form表单中name属性的值保持一致。
比如:setName()–> Name–> name
一般情况下,字段名和属性名和form表单中name属性的值一致的。
BeanUtils常用方法:
1. public static void setProperty(Object bean, String name, Object value)
给指定对象bean的指定name属性赋值为指定值value。
//如果指定的属性不存在,则什么也不发生。
2.public static String getProperty(Object bean, String name)
获取指定对象bean指定name属性的值。
//如果指定的属性不存在,则会抛出异常。
注意:当属性的类型是数组类型时,获取到的值数组中的第一个值。
3.public static void copyProperties(Object dest, Object orig)
将对象orig的属性值赋值给对象dest对象对应的属性
注意:只有属性名名相同且类型一致的才会赋值成功。
4. public static void populate(Object bean, Map<String, ? extends Object>
properties)
将一个Map集合中的数据封装到指定对象bean中
注意:对象bean的属性名和Map集合中键要相同。
BeanUtils使用场景:
- 快速将一个JavaBean各个属性的值,赋值给具有相同结构的另一个JavaBean中。
- 快速收集表单中的所有数据到JavaBean中。
快速收集表单中的所有数据到JavaBean中:
/****************************方法一*/
/**
* BeanUtils可以直接get和set一个属性的值。它将property分成3种类型:
* Simple——简单类型,如Stirng、Int……
* Indexed——索引类型,如数组、arrayList……
* Maped——这个不用说也该知道,就是指Map啦,比如HashMap
* 以下方法获取参数,封装成bean,
* 约定前提: 请求中的参数名称 需要和javabean的属性名称保持一致!!!!
*/
public static <T> T getRequestBean(HttpServletRequest request,Class<T> clazz){
T bean=null;
try {
//实例化clazz
bean = clazz.newInstance();
//获取request请求中所有携带的参数,返回Enumeration枚举类型
Enumeration<String> enumeration = request.getParameterNames();
//判断这个枚举中是否存在下一个参数key,存在 :true,不存在:false
while(enumeration.hasMoreElements()){
//取得参数key
String name = enumeration.nextElement();
//根据参数key,获取值(value)
String value = request.getParameter(name);
//给bean中对应的属性name设置值value
BeanUtils.setProperty(bean, name, value);
}
} catch (Exception e) {
}
return bean;
}
/*************************************方法二*/
public static <T> T getRequestParam(HttpServletRequest request,Class<T> clazz){
T t=null;
try {
t = clazz.newInstance();
Map<String, String[]> map = request.getParameterMap();
BeanUtils.populate(t, map);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}