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

来源:互联网 发布:c语言打印倒九九乘法表 编辑:程序博客网 时间:2024/06/07 08:41

    上篇文章我们已经讨论过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 ==> dateSimpleDateFormat 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方法的两个缺陷,还节省了代码量,提高了工作效率。

1 0
原创粉丝点击