《JavaBean》----Java中的内省机制二

    上篇文章我们已经讨论过Java中的内省机制了,我们虽然将内省机制封装好了一个方法供给我们调用,但是它还是有一定缺陷的,缺陷1:比如说,上面那个方法只能转换8种基础数据类型,如果表单上有一个日期类型的数据,比如说表单有一个让我们填写生日的input,或者是说我们的JavaBean有有一个成员变量是Date类型的,那么我们封装的方法就不行了,这时候我们封装的方法就报错。缺陷2:其实我们还可以抛弃我们封装好的方法,替而代之是一个jar包,这个jar包中就已经封装好了内省机制。这样不更省代码吗?

    1、解决缺陷1

    我们应该封装好一个类,这个类负责转换这个日期类型的数据,然后我们再用内省机制给后台的Model赋值,代码如下。

public class MyConverter implements Converter {

	public Object convert(Class arg0, Object arg1) {
		
		String birthdayStr = arg1.toString();//1990-01-01 ==> date
		
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		
		try {
			return format.parse(birthdayStr);
		} catch (ParseException e) {
			e.printStackTrace();
			return null;
		}

	}

}

  2、解决缺陷2

  引用jar包commons-beanutils-1.8.3-bin.zip ,我们利用BeanUtils工具实现populate方法,代码如下

public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		user u=new user();
		try {
		
		ConvertUtils.register(new MyConverter(), Date.class);
		BeanUtils.populate(u, request.getParameterMap());
		
	        } catch (IllegalAccessException e) {
			e.printStackTrace();
			// TODO: handle exception
		}catch(InvocationTargetException e){
			e.printStackTrace();
		}
		ConvertUtils.register(new MyConverter(), Date.class);
		populate(request.getParameterMap(),u);
		System.out.println(u);
		
	}

    我们用BeanUtils工具类代替了之前封装好的方法,用MyConvert类来转换表单中的参数,当然,这个类不仅仅可以转化Date,我们还可以继续将其封装,转化其它类型的参数,用这两种方法,解决上上一篇博客中populate方法的两个缺陷,还节省了代码量,提高了工作效率。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值