Beanutils基本用法.docVIP

  • 8
  • 0
  • 约8.78千字
  • 约 11页
  • 2016-12-29 发布于重庆
  • 举报
Beanutils基本用法 Beanutils用了魔术般的反射技术,实现了很多夸张有用的功能,都是C/C++时代不敢想的。无论谁的项目,始终一天都会用得上它。我算是后知后觉了,第一回看到它的时候居然错过。 1.属性的动态getter,setter 在这框架满天飞的年代,不能事事都保证执行getter,setter函数了,有时候属性是要需要根据名字动态取得的,就像这样:   BeanUtils.getProperty(myBean,code); 而BeanUtils更强的功能是直接访问内嵌对象的属性,只要使用点号分隔。 BeanUtils.getProperty(orderBean, address.city); 相比之下其他类库的BeanUtils通常都很简单,不能访问内嵌的对象,所以经常要用Commons BeanUtils替换它们。 BeanUtils还支持List和Map类型的属性。如下面的语法即可取得顾客列表中第一个顾客的名字 BeanUtils.getProperty(orderBean, customers[1].name); 其中BeanUtils会使用ConvertUtils类把字符串转为Bean属性的真正类型,方便从HttpServletRequest等对象中提取bean,或者把bean输出到页面。而PropertyUtils就会原色的保留Bean原来的类型。 2.beanCompartor 动态排序 还是通过反射,动态设定Bean按照哪个属性来排序,而不再需要在bean的Compare接口进行复杂的条件判断。 List peoples = ...; // Person对象的列表Collections.sort(peoples, new BeanComparator(age)); 如果要支持多个属性的复合排序,如Order By lastName,firstName ArrayList sortFields = new ArrayList();sortFields.add(new BeanComparator(lastName)); sortFields.add(new BeanComparator(firstName)); ComparatorChain multiSort = new ComparatorChain(sortFields); Collections.sort(rows,multiSort); 其中ComparatorChain属于jakata commons-collections包。 如果age属性不是普通类型,构造函数需要再传入一个comparator对象为age变量排序。 另外, BeanCompartor本身的ComparebleComparator, 遇到属性为null就会抛出异常, 也不能设定升序还是降序。 这个时候又要借助commons-collections包的ComparatorUtils. Comparator mycmp = ComparableComparator.getInstance(); mycmp = ComparatorUtils.nullLowComparator(mycmp); //允许null mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序 Comparator cmp = new BeanComparator(sortColumn, mycmp); 3.Converter 把Request或ResultSet中的字符串绑定到对象的属性 经常要从request,resultSet等对象取出值来赋入bean中,下面的代码谁都写腻了,如果不用MVC框架的绑定功能的话。 String a = request.getParameter(a); bean.setA(a); String b = .... 不妨写一个Binder: MyBean bean = ...; HashMap map = new HashMap(); Enumeration names = request.getParameterNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); map.put(name, request.getParameterValues(name)); } BeanUtils.populate(bean, map);

文档评论(0)

1亿VIP精品文档

相关文档