黑马程序员技术交流社区

标题: 求助!JavaBean用阿帕奇开源 [打印本页]

作者: 小马过河    时间: 2013-12-28 23:01
标题: 求助!JavaBean用阿帕奇开源
本帖最后由 小马过河 于 2013-12-28 23:24 编辑

程序注释的部分都没有问题,问题就出在最下面第三种方式上面了~~~~~~~~各种没辙。
报错如下:Exception in thread "main" java.lang.NoSuchMethodException: Property 'age' has no getter method in class 'class 练习javaBean.Student
代码如下:大神帮忙看看吧
  1. package 练习javaBean;

  2. import java.beans.BeanInfo;
  3. import java.beans.Introspector;
  4. import java.beans.PropertyDescriptor;
  5. import java.lang.reflect.Method;
  6. import java.util.Date;

  7. import org.apache.commons.beanutils.BeanUtils;


  8. /**
  9. * JavaBean练习,对Student的属性进行操作
  10. * 步骤:        1创建类的对象。
  11. *                 2通过属性描述符这个类指明JavaBean类,传入我们要拿到的属性。
  12. *                 3通过反射得到对应的方法
  13. *                 4调用
  14. *
  15. *
  16. */
  17. public class BeanTest {
  18.         public static void main(String[] args) throws Exception {
  19.                 String propertyName="age";                                                //要做改变的属性。
  20.                 String propertyName2="name";
  21.                 Student sd = new Student(25,"苍老师");                        //创建对象
  22.                
  23. //                PropertyDescriptor pd = new PropertyDescriptor(propertyName,sd.getClass());
  24. //                PropertyDescriptor pd2 = new PropertyDescriptor(propertyName2,sd.getClass());
  25. //                                                                                                                //属性描述符,根据对字节码文件和属性名进行说明得到具体属性。
  26. //                Object retVal=24;
  27. //                Method methodSetAge=pd.getWriteMethod();                //反射得到这个属性的设置方法。
  28. //                methodSetAge.invoke(sd, retVal);                                //更改这个属性的值
  29. //               
  30. //                Method methodGetAge=pd.getReadMethod();                 //反射得到这个属性的获取方法。
  31. //                System.out.println(methodGetAge.invoke(sd));        //因为是get方法,所以没有其他参数。
  32. //               
  33. //                //第二种方式,得到名称。
  34. //                BeanInfo  bf = Introspector.getBeanInfo(sd.getClass()); //BeanInfo是接口,通过IntorSpector类了解所有的属性,公开方法和事件。
  35. //                PropertyDescriptor[] pds=bf.getPropertyDescriptors();        //将所有的属性罗列成一个数组
  36. //                Object obj="苍井空";
  37. //                for (PropertyDescriptor pdt : pds) {
  38. //                        if (pdt.getName().equals(propertyName2)) {
  39. //                                Method methodSetName = pd2.getWriteMethod();
  40. //                                methodSetName.invoke(sd, obj);                        
  41. //                                Method methodGetName = pd2.getReadMethod();
  42. //                                System.out.println(methodGetName.invoke(sd));
  43. //                                break;
  44. //                        }
  45. //                }
  46.                
  47.                 //第三种方式
  48.                
  49.                 System.out.println(BeanUtils.getProperty(sd, propertyName));
  50.                
  51.                 BeanUtils.setProperty(sd, propertyName, "9");
  52.                 System.out.println(sd.getAge());         
  53.                
  54.               
  55.                
  56.         }

  57. }
复制代码
类也写了,自动生成不会有问题啊;
  1. package 练习javaBean;

  2. import java.util.Date;

  3. public class Student {
  4.         private int age;
  5.         private String name;
  6.         private Date birthday;
  7.         public Student(){}
  8.         public Student(int age,String name){
  9.                 this.age=age;
  10.                 this.name=name;
  11.         }
  12.         public int getAge() {
  13.                 return age;
  14.         }
  15.         public void setAge(int age) {
  16.                 this.age = age;
  17.         }
  18.         public String getName() {
  19.                 return name;
  20.         }
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }
  24.         public Date getBirthday() {
  25.                 return birthday;
  26.         }
  27.         public void setBirthday(Date birthday) {
  28.                 this.birthday = birthday;
  29.         }
  30.         
  31. }
复制代码
个位大神帮忙看看啊~~~~~~~~~~~~~~~~~~~~

{:soso__4543169153280382615_7:}
































作者: 汪洋大海    时间: 2013-12-28 23:11
把student类前面加上public。。简单吧
作者: 小马过河    时间: 2013-12-28 23:18
汪洋大海 发表于 2013-12-28 23:11
把student类前面加上public。。简单吧

还是不成立啊,说什么没有指定Bean  再帮忙看看哇 你该不会就是汪洋那娃吧
作者: 汪洋大海    时间: 2013-12-28 23:21
小马过河 发表于 2013-12-28 23:18
还是不成立啊,说什么没有指定Bean  再帮忙看看哇 你该不会就是汪洋那娃吧 ...

我就叫汪洋。。你是?
你导了beanutil包了吧。然后我就不知道了。。哈哈
作者: 汪洋大海    时间: 2013-12-28 23:27
本帖最后由 汪洋大海 于 2013-12-28 23:29 编辑
小马过河 发表于 2013-12-28 23:18
还是不成立啊,说什么没有指定Bean  再帮忙看看哇 你该不会就是汪洋那娃吧 ...

刚才你的代码我没仔细看,,一看发现你的值传错了,没有propername这个值。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2