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

利用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数据搞到实体中



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值