zhyiwww
用平实的笔,记录编程路上的点点滴滴………
posts - 536,comments - 394,trackbacks - 0
 

我们在Web开发中,可能经常会从表单中取值,然后封装成一个bean的时候。

可能你也是这样做的:

String uname = (String)request.getParameter("uname");

String upass = (String)request.getParameter("upass");

User u = new User(uname,upass);

或者

U.set……

u.set……

等等

如果字段很多的话,可能前面就要很多的各这样的过程。也许你也会觉得很是麻烦,又没有好的办法。

我们可以使用反射来实现,也许可以减轻一点您的负担。

代码如下:

User u = new User();

  

  Enumeration m = request.getParameterNames();

  while(m.hasMoreElements()){

   String  pn = (String)m.nextElement();

   out.println(pn + " --- ");

   String  pv = (String)request.getParameter(pn);

   out.println( pv + "<br>");

   

   Class c = u.getClass();   

   out.println(" class is : " + c + "<br>");

   

   try {

       

    Field f = c.getField(pn);

    

    out.println("field is : " + f + "<br>");

    f.set(u, pv);

    

    out.println(" user name is : " + u.getUname() + "<br>");

    out.println(" user pass is : " + u.getUpass() + "<br>");

    

   } catch (SecurityException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   } catch (NoSuchFieldException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   } catch (IllegalArgumentException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   } catch (IllegalAccessException e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

   }

  }

  我们也可以把这个部分封装起来成一个类,实现从request到一个bean的注入。

上面的方法有一个缺点,由于我们使用的Field来实现的,所以,能取得的字段一定要声明成public,如果是private的,就不能取到了。

测试结果如下:

uname --- zywewqeqwe

class is : class org.zy.demo.sd.bean.User

private field is : private java.lang.String org.zy.demo.sd.bean.User.uname

upass --- zywqeqweqweqw

class is : class org.zy.demo.sd.bean.User

private field is : private java.lang.String org.zy.demo.sd.bean.User.upass

解决上面的问题,我们可以使用另外一个方法:

 

    Field f = c.getDeclaredField(pn);

    out.println(" private field is : " + f + "<br>");

就这一个方法的不同就可以实现和上面的不同的结果,上面的

 Field f = c.getField(pn);

可以能取public的字段,但是

getDeclaredField(pn);

同时可以取到private字段的值。

注意:

上面的功能要能实现,要保证form的字段和bean定义的字段的完全一致。

希望自己的一点小小的体会能对您起到一点帮助作用。



|----------------------------------------------------------------------------------------|
                           版权声明  版权所有 @zhyiwww
            引用请注明来源 http://www.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2007-09-21 18:08 zhyiwww 阅读(1187) 评论(2)  编辑  收藏 所属分类: j2ee

FeedBack:
# re: Web开发中使用反射为Bean赋值
2007-09-22 00:05 | 千里冰封
反射用得好的话,是很灵活的  回复  更多评论
  
# re: Web开发中使用反射为Bean赋值
2007-09-22 07:28 | sitinspring
文章不错,格式可以稍微调整一下.  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
博客园   IT新闻   Chat2DB   C++博客   博问