java使用反射赋值_Web开发中使用反射为Bean赋值

我们在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 + "
");

Class c = u.getClass();

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

try {

Field f = c.getField(pn);

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

f.set(u, pv);

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

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

} 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 + "
");

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

Field f = c.getField(pn);

可以能取public的字段,但是

getDeclaredField(pn);

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

注意:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值