2013-02-14 28 views
1

我尝试使用setter来设置值,但null会出现。请帮助我解决此问题,并告诉我是否还有其他更好的方法。使用BeanUtils设置设置值

import org.apache.commons.beanutils.BeanUtils; 

public class TestSetter { 

    public static void main(String args[]) throws Exception 
    { 
     Test t = new Test(); 
     BeanUtils.setProperty(t,"te","teval"); 
     System.out.println("tevalue :"+t.getTe()); 
    } 
} 
class Test 
{ 
    String te; 

    public String getTe() { 
     return te; 
    } 

    public void setTe(String te) { 
     this.te = te; 
    } 

} 

例外:

Exception in thread "main" java.lang.reflect.InvocationTargetException: Cannot set te 
    at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1025) 
    at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:313) 
    at test.reflection.TestSetter.main(TestSetter.java:10) 
Caused by: java.lang.NoSuchMethodException: Property 'te' has no setter method 
    at org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:1746) 
    at org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1648) 
    at org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:1677) 
    at org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1022) 
    ... 2 more 
+1

不能让我经验领域,但尝试'BeanUtils.setProperty(t,“Te”,“teval”)'代替... – MadProgrammer 2013-02-14 04:11:53

+0

对不起,因为这也给出了相同的结果。 – sunleo 2013-02-14 04:12:56

回答

12

您的等级Test应该是public类,将Test移动到一个自己的文件,使其公开并重新运行您的代码。

+0

谢谢你的作品问题是它缺少的公共修饰符。 – sunleo 2013-02-14 04:19:26

+1

+1好收拾 – MadProgrammer 2013-02-14 04:21:26

6

其设于字段的名称:

BeanUtils.setProperty(t,"te","teval"); 

Documentation这里

+0

已经试过了,它给了这个异常引起:java.lang.NoSuchMethodException:属性'te'没有setter方法 – sunleo 2013-02-14 04:11:50

+0

Doc说,但它不工作多数民众赞成在为什么问..... – sunleo 2013-02-14 04:15:25

+0

测试类不是上市。 BeanUtils似乎不能解析受保护的类...(ps否则是正确的) – MadProgrammer 2013-02-14 04:19:58

0

setProperty()

的方法签名210
public static void setProperty(Object bean, 
           String name, 
           Object value) 
         throws IllegalAccessException, 
           InvocationTargetException 

    Parameters: 
     bean - Bean on which setting is to be performed 
     name - Property name (can be nested/indexed/mapped/combo) 
     value - Value to be set 

name是属性名称“te”不是“setTe”。

BeanUtils.setProperty(t,“te”,“teval”);

+0

我接受和测试,但现在它给这个错误。我更新了问题。请检查。 – sunleo 2013-02-14 04:17:31

+0

@sunleo测试课程不公开,请参阅Jayamohan的答案,然后申请Shawn和Pradeep的答案 – MadProgrammer 2013-02-14 04:21:10