Servlet接收form表单数据集合

开发工具与关键技术:MyEclipse 10、JAVA
作者:曾浩源
撰写时间:2019年06月01日

在进行数据的新增或修改时,都有着大量的数据需要传给Serlvet进行处理。
传输时,要不是通过form表单里的提交按钮,提交数据,如:

<form action="${ctx}/servlet/LoginServlet">
	<input name="UserName" type="text" value="用户名称" >
	<input name="PassWord" type="text" value="用户密码" >
	<div class="submit"><input type="submit" value="Login"></div>
</form>

要不就是通过按钮触发方法,使用JQuery里的serializeArray方法获取form表单里的数据,使用post提交一并提交到Servlet,如:

	var Userform = $("#Userform").serializeArray();
	$.post(url, Userform , function(msg) {}

虽然数据少的时候可以一个一个的获取数据,如:

	String UserName= req.getParameter("UserName");
	String PassWord = req.getParameter("PassWord");

但若有十几二十个岂不是要写十几二十行?
所有就有了别人封装好jar包:

主要是 commons-beanutils-1.9.2.jar

但这个jar包依赖于 commons-logging-1.1.1.jar

所以这两个jar包都要有。

之后的使用就很简单了。
实例化一个实体类,用于存储数据(实体类里的属性必须和form表单里的name值一致,不然无法给实体类里的属性赋值)如:

User user= new User();
BeanUtils.populate(user, req.getParameterMap());

之后它需要抛几个异常
最后就是新增和修改操作;

新增可以这样,但修改如果不需要修改全部数据,在jsp页面中,只传来表中的几个数据怎么办?
如果想以上那样修改肯定会把那条数据中的某几个字段的值变为了null或””字符串
所以BeanUtils.populate也支持覆盖。
在给实体类赋值之前先根据所需要修改的id,获取整一条数据赋值给实体类,之后再使用BeanUtils.populate给实体类赋值,如:

int UserID = Integer.valueOf(req.getParameter("UserID"));
IUserService userService = new UserServiceImpl();
User user=userService .findById(UserID);

在少数据可直接使用实体类里的setter方法修改实体类里的值,最后进行修改操作,数据较多数时,可直接使用BeanUtils.populate对实体类里的值进行覆盖,最后进行修改操作。

BeanUtils.populate(user, req.getParameterMap());

最后执行修改操作

boolean data = userService .update(user);

到最后说一下BeanUtils.populate抛出的两个异常:

IllegalAccessException  非法访问异常

当应用程序试图反射性地创建一个实例(而不是数组)、设置或获取一个字段,或者调用一个方法,但当前正在执行的方法无法访问指定类、字段、方法或构造方法的定义时,抛出
到最后说一下BeanUtils.populate抛出的两个异常:

InvocationTargetException  调用目标异常

是一种包装由调用方法或构造方法所抛出异常的经过检查的异常

上一篇:java 内省综合案例和Beanutils工具包


下一篇:反射为单级属性赋值