首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

【转】commons.beanutils.ConversionException: No value specified解决方法

2013-01-23 
【转】commons.beanutils.ConversionException: No value specified解决办法project basedir.property

【转】commons.beanutils.ConversionException: No value specified解决办法

<project basedir=".">
<property name="app.home" value="." />
<property name="src.home" value="${app.home}/src" />
<property name="web.home" value="${app.home}/WebRoot" />
<property name="lib.home" value="${web.home}/WEB-INF/lib" />
<property name="classes.home" value="${web.home}/WEB-INF/classes" />
<property name="resources.package" value="java/resources" />
<property name="resources.src" value="${src.home}/${resources.package}"/>
<property name="resources.dest" value="${classes.home}/${resources.package}"/>

<path id="compile.classpath">
?? <pathelement location="${lib.home}" />
?? <pathelement path="${lib.home}" />
</path>

<!--主要完成资源文件的编码文件格式转换和拷贝到目标资源。-->
<target name="resources">
?? <delete includeemptydirs="true" quiet="true">
??? <fileset dir="${resources.dest}">
???? <include name="*.properties"/>
??? </fileset>
?? </delete>
?? <mkdir dir="${resources.dest}"/>
?? <native2ascii encoding="GB2312" src="${resources.src}" dest="${resources.dest}" includes="**/*_zh_CN.properties" />
?? <copy todir="${resources.dest}">
??? <fileset dir="${resources.src}">
???? <include name="*.properties"/>
???? <exclude name="*.zh_CN.properties"/>
??? </fileset>
?? </copy>
</target>

</project>


<2>大字段解决方案:
做属性拷贝的时候类型为BigDecimal属性的值是null,所以会出现这样的错误。?
因为如果你看BeanUtils的源代码就知道,对于BigDecimal类型的属性其对应的转换器类BigDecimalConverter在调用convert方法的时候会做如下判断:


Java code?
??? public Object convert(Class type, Object value) {
[color=#FF6600]
??????? if (value == null) {
??????????? if (useDefault) {
??????????????? return (defaultValue);
??????????? } else {
??????????????? throw new ConversionException("No value specified");
??????????? }
??????? }[/color]

??????? if (value instanceof BigDecimal) {
??????????? return (value);
??????? }

??????? try {
??????????? return (new BigDecimal(value.toString()));
??????? } catch (Exception e) {
??????????? if (useDefault) {
??????????????? return (defaultValue);
??????????? } else {
??????????????? throw new ConversionException(e);
??????????? }
??????? }

??? }

红色部分就是产生这个错误的原因,首先被拷贝对象的该属性值为null,同时useDefault是false(这个在BigDecimalConverter类默认实例化的时候就定义了,如下代码:)


Java code?
??? public BigDecimalConverter() {

??????? this.defaultValue = null;
??????? this.useDefault = false;

??? }

所以会产生你所遇到的错误。

对bBean这个对象中的BigDecimal类型属性进行赋值,然后进行属性拷贝,就可以避免你的错误。

热点排行