开发工具与关键技术: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包:
所以这两个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 调用目标异常
是一种包装由调用方法或构造方法所抛出异常的经过检查的异常