利用BeanUtils框架将formbean中数据整合到实体中时,因为formbean中数据类型都是String类型,所以往往需要将String类型转化为其他类型再整合到实体中,这时就需要注册一些全局的类型转化器
package cn.lfd.web.listener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import cn.lfd.golobals.Gender;
import cn.lfd.golobals.Preference;
/*
* 利用全ServletContextListener监听器注册类型转换器
*/
public class WebInitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
web应用一启动就会调用这个方法
@Override
public void contextInitialized(ServletContextEvent arg0) {
//注册一个把String类型转化为Date类型的转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null) {//若值为空不需要转换,直接返回null
return null;
}
if(value instanceof String) {
String str = (String) value;
if(str.trim().equals("")) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date d = sdf.parse(str);
return d;
} catch (ParseException e) {
throw new RuntimeException("输入的类型不是字符串");
}
}
return null;
}
}, Date.class);
//注册一个把String类型转化为Gender枚举类型的转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null) {
return null;
}
String str = (String) value;
Gender g = Gender.valueOf(str.toUpperCase());
return g;
}
}, Gender.class);
//注册一个把String类型转化为Double类型的转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null) {
return null;
}
return Double.parseDouble((String)value);
}
}, double.class);
//注册一个把String类型转化为Preference[]枚举数组类型的转换器
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
if(value==null) {
return null;
}
String[] pres = (String[]) value;
Preference[] pre = new Preference[pres.length];
for(int i = 0;i<pres.length;i++) {
pre[i++] = Preference.valueOf(pres[i].toUpperCase());
}
return pre;
}
}, Preference[].class);
}
}
然后在web.xml文件中配置一下就使用BeanUtils.copyProperties(user, bean);轻松的把formbean数据搞到实体中