用ServletContextListener监听器注册类型转换器

来源:互联网 发布:ubuntu出错 编辑:程序博客网 时间:2024/06/03 07:46

利用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 {@Overridepublic void contextDestroyed(ServletContextEvent arg0) {// TODO Auto-generated method stub}////web应用一启动就会调用这个方法@Overridepublic void contextInitialized(ServletContextEvent arg0) {//注册一个把String类型转化为Date类型的转换器ConvertUtils.register(new Converter() {@Overridepublic Object convert(Class type, Object value) {if(value==null) {//若值为空不需要转换,直接返回nullreturn 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() {@Overridepublic 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() {@Overridepublic Object convert(Class type, Object value) {if(value==null) {return null;}return Double.parseDouble((String)value);}}, double.class);//注册一个把String类型转化为Preference[]枚举数组类型的转换器ConvertUtils.register(new Converter() {@Overridepublic 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数据搞到实体中



0 0
原创粉丝点击