web基础之自动处理表单填装javabean

http://hi.baidu.com/smilelive/blog/item/e31b8f50ea1ef212367abe77.html

web开发中,肯定会设计到表单的提交,而表单一般都设计到一个表,表又对应一个javabea。一般我们都在重复大量的request.getParameter();和x.setXX();这种操作。那么有没有什么办法可以简化上面的操作?

假定我们有个User类,属性name,sex,age;一个jsp或html页面,有一个表单表单属性name,sex,age和javabean对应。一个处理表单上传的servlet。

这里主要说这个Servlet的功能:

Enumeration en = request.getParameterNames();//获得所有请求的参数
User user = new User();
Field[] fs = user.getClass().getDeclaredFields();//获得user类的所有属性列表
while (en.hasMoreElements()) {//遍历请求参数
String param = en.nextElement().toString().trim();//获得属性名
for (int i = 0; i < fs.length; i++) {//遍历user类的属性列表
if (!fs[i].getName().equals(param)) {//如果属性名和请求参数名不等则继续,这里这样写了为了减少if else的嵌套;
continue;
}
fs[i].setAccessible(true);//设置属性为可改变,反射中private的属性是不能被访问的,设置Accessible为true则该属性可访问
Object value = null;
if (fs[i].getType().getName().equals("java.lang.String")) {//判断属性类型一般的javabean属性类型都要定义成为八大基本数据类型和八大基本类型的扩展数据类型,最多再加上Date和Time等常用数据类型。
value = request.getParameter(param).toString();
} else if (fs[i].getType().getName().equals("int")) {
value = Integer.parseInt(request.getParameter(param).trim());
}
try {
fs[i].set(user, value);//设置属性的值
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
break;
}
}

System.out.println(user.getName()+"\t"+user.getAge()+"\t"+user.getSex());

这样的一个Serlvet只能设置一个类的值,想设置多个类的值,可以在url后面加一个参数,比如xx.do?jb=com.up72.bean.User,Servlet对象的创建修改为

String className = request.getParameter("jb");

Object javabean = Class.forName(className).newInstance();

其他操作不变。

当然,更好的办法是写一个配置文件,通过读取配置文件来初始化bean,这个还前面的简单Servlet结合起来基本就可以完成简单的struts的核心控制器的功能了。不过还有文件上传的问题没有解决。

借助mootools 快速开发一个重用 ajax 提交方式
http://jhaij.iteye.com/blog/1136595
(这篇文章里演示了如何使用自动封装)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值