Java web工程中BeanUtils的封装MyBeanUtils,populate方法使用
接收form表单数据
MyBeanUtils.populate(user, request.getParameterMap());
BeanUtils.populate(obj, map);
浅谈 BeanUtils 的封装 , BeanUtils 类中方法 populate (Object bean, Map properties ); 用于把 form 提交的表单中数据封装在 bean中;
request 中相比于 getParameter ( 标签 id ) 单个获取 属性值将 ,提高效率简化代码;
抽取为MyBeanUtils 以后,更为便捷 ,jar 下载地址 repository 仓库搜索下载: 使用 maven 可直接配置 依赖;
package cn.itzheng.store.utils;
import java.util.Map;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.converters.DateConverter;
public class MyBeanUtils {
public static void populate(Object obj, Map<String, String[]> map) {
try {
// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
// 1_创建时间类型的转换器
DateConverter dt = new DateConverter();
// 2_设置转换的格式
dt.setPattern("yyyy-MM-dd");
// 3_注册转换器
ConvertUtils.register(dt, java.util.Date.class);
BeanUtils.populate(obj, map);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static<T> T populate(Class<T> clazz, Map<String, String[]> map) {
try {
T obj=clazz.newInstance();
// 由于BeanUtils将字符串"1992-3-3"向user对象的setBithday();方法传递参数有问题,手动向BeanUtils注册一个时间类型转换器
// 1_创建时间类型的转换器
DateConverter dt = new DateConverter();
// 2_设置转换的格式
dt.setPattern("yyyy-MM-dd");
// 3_注册转换器
ConvertUtils.register(dt, java.util.Date.class);
BeanUtils.populate(obj, map);
return obj;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
实例中使用场景,主要在注册 时候 form 表单提交的数据 进行封装 ;
实体bean ,User 类的成员属性 很多的时候 ,从request 请求中一个个获取 表单数据 效率低下 ,例如以下User 的成员属性如下:
如果按下面的这种方法做太过于复杂,如果数据量大,代码臃肿
//1.获取用户数据 封装到User对象中
String id = request.getParameter("id");
String name = request.getParameter("name");
String sex = request.getParameter("sex");
String address = request.getParameter("address");
String email = request.getParameter("email");
String qq = request.getParameter("qq");
String age = request.getParameter("age").equals("")?"18":request.getParameter("age");
//2.封装数据
User user = new User();
user.setId(Integer.valueOf(id));
user.setName(name);
user.setSex(sex);
user.setAddress(address);
user.setEmail(email);
user.setQq(qq);
user.setAge(Integer.valueOf(age));
使用MyBeanUtils.populate方法对其进行封装,将对应要分装的类传入,
User user = MyBeanUtils.populate(User.class, request.getParameterMap());
MyBeanUtils.populate—》BeanUtils.populate(obj, map);
这个方法的内部执行机制是。遍历map集合中的key,判断bean对象中是否有以这个和key相同的属性,如果有就将这个key对应的value值,付给bean对应的属性。