大家好,最近很多小伙伴想了解beanutils.populate的相关信息,给大家科普专门整理了与beanutils.populate相关的一些内容,让我们一起看看吧。
本文目录一览:
有可能的原因:BeanUtils.populate()方法没有设置正确。ReDa旦抚测幌爻呵诧童超阔ta类中重载的toString方法中没有设置正确。这两个方法的代码都没有,所以没法判断。 另外:类名一般都是以大写字母开头,allxmlUtil我还以为是个变量呢。
追问:
改写了一下 map里面的数值还是封装不进去
追答:
你把BeanUtils.populate()方法的代码和TestBean.toString()的代码贴出来呀
BeanUtils的copyProperties方法用来将orig中的成员变量的值复制给dest 。
public void copyProperties(Object dest, Object orig)
BeanUtils的populate方法用来将MapKey,value中的以值(String或String[])转换到目标bean对应的属性中,Map中的Key是目标bean的属性名。
public static void populate(Object bean, Map properties)
describe(bean)就是把一个对象bean转换成HashMap,键是属性名,值是属性值 .这个与populate方法基本上是相反的过程
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);
javax.servlet.ServletException: BeanUtils.populate 解决方案:ENCTYPE="multipart/form-data"(1)在用Struts上传文件时,遇到了javax.servlet.ServletException: BeanUtils.populate异常。我的ActionServlet并没有用到BeanUtils这些工具类。感觉很奇怪。后来仔细检查代码发现是在jsp文件里的form忘了加enctype="multipart/form-data" 了。加上之后,果然没有异常了。所以写程序遇到错误或异常应该从多方面考虑问题存在的可能性,想到系统提示信息以外的东西。(2)ENCTYPE="multipart/form-data"解释:用于表单里有图片上传。form name="userInfo" method="post" action="first_submit.jsp" ENCTYPE="multipart/form-data"
表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。
如下:
tr
td height="30" align="right"上传企业营业执照图片:/td
tdINPUT TYPE="FILE" NAME="uploadfile" SIZE="34" onChange="checkimage()"/td
/tr
就得加ENCTYPE="multipart/form-data"。
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
enctype=\"multipart/form-data\"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,
取表单值加入数据库时,用到下面的:SmartUpload su = new SmartUpload();//新建一个SmartUpload对象su.getRequest().getParameterValues();取数组值su.getRequest().getParameter( );取单个参数单个值
以上beanutils.populate的介绍就聊到这里,希望能对你有所帮助。