我们在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定义的字段的完全一致。
希望自己的一点小小的体会能对您起到一点帮助作用。
|----------------------------------------------------------------------------------------|
|----------------------------------------------------------------------------------------|
posted on 2007-09-21 18:08
zhyiwww 阅读(1187)
评论(2) 编辑 收藏 所属分类:
j2ee