1. 数组的绑定
当前端请求需要传递到后台一个或多个相同名称参数的情况 (如批量删除),此种情况采用前面讲解的简单数据绑定的方式显然是不合适的,此时,就可以使用绑定数组的方式来完成。
创建一个展示用户信息的列表页面 user.jsp。如下:
定义了 name 属性相同而 value 属性值不同的复选框控件,并在每一个复选框对应的行中编写了一个对应用户,在单击"删除"按钮执行删除操作时,表单会提交到一个以 “/DeleteUsers” 结尾的请求中。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>DeleteUser</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/hello/DeleteUser" method="get">
<table border="1">
<tr>
<td>选择</td>
<td>用户名</td>
</tr>
<tr>
<td><input name="ids" value="10" type="checkbox" /></td>
<td>黄月月1号</td>
</tr>
<tr>
<td><input name="ids" value="20" type="checkbox" /></td>
<td>黄月月2号</td>
</tr>
<tr>
<td><input name="ids" value="30" type="checkbox" /></td>
<td>黄月月3号</td>
</tr>
</table>
<input type="submit" value="删除"/>
</form>
</body>
</html>
jsp页面定义之后就需要编写java代码对数据进行操作。
先定义了一个向用户列表页面 user.jsp 跳转的方法,然后定义了一个接收前端批量删除用户的方法 在删除方法中,使用了Integer 类型的数组进行数据绑定,并通过 for循环执行具体数据的删除操作。
//定义入口
@RequestMapping(value = "/toUser")
public String SelectUser() {
return "user";
}
//数据操作
@RequestMapping(value = "/DeleteUser")
public String DeleteUser(Integer [] ids) {
if (ids!=null) {
for (int i = 0; i < ids.length; i++) {
System.out.println("删除id为:"+ids[i]+" 的值!");
}
}else {
System.out.println("ids == null");
}
return "success";
}
运行项目,打开网址 http://localhost:8080/DataBanding/hello/toUser
选择俩个要删除的数据,点击删除提交。
在eclipse的控制台当中可以看到输出结果。由于只做简单演示,并没有对数据库当中的数据进行修改。只是单纯的对传递的参数进行获取输出。
2. 集合的绑定
在批量删除用户的操作中,前端请求传递的都是同名参数的用户 id ,只要在后台使用同一种数组类型的参数绑定接收,就可以在方法中通过循环数组参数的方式来完成删除操作,但如果是批量修改用户操作,前端请求传递过来的数据可能就会批量包含各种类型的数据,如 Integer,String。针对这种情况,我们可以使用集合数据绑定:即在包装类中定义一个包含用户信息类的集合,然后在接收方法中将参数类型定义为该包装类的集合。
新建一个com.lzq.vo包用于存放集合当中的元素。在包中新建一个类,变量定义及getter/setter
package com.lzq.vo;
import java.util.List;
import com.lzq.po.User;
public class UserVO {
private List<User> users;
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}
定义一个jsp页面。user_edit.jsp当中对数据进行传递
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>集合</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/hello/EditUsers" method="post" id="formid">
<table width="30%" border="1">
<tr>
<td>选择</td>
<td>用户名</td>
</tr>
<tr>
<td><input name="users[0].id" value="10" type="checkbox" /></td>
<td><input name="users[0].username" value="huangyueyue1" type="text" /></td>
</tr>
<tr>
<td><input name="users[1].id" value="20" type="checkbox" /></td>
<td><input name="users[1].username" value="huangyueyue2" type="text" /></td>
</tr>
<tr>
<td><input name="users[2].id" value="30" type="checkbox" /></td>
<td><input name="users[2].username" value="huangyueyue3" type="text" /></td>
</tr>
</table>
<input type="submit" value="修改"/>
</form>
</body>
</html>
最后编写接收批量修改用户的方法,以及向用户修改页面跳转的方法,在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO 作为形参,然后在包装 POJO 中包装一个集合属性。
@RequestMapping(value = "/toUserEdit")
public String toUserEdit() {
return "user_edit";
}
@RequestMapping(value = "/EditUsers")
public String EditUsers(UserVO userList) {
List<User> users = userList.getUsers();
if (users!=null) {
for (User user : users) {
if (user.getId()!=null) {
System.out.println("修改数据 :id = " + user.getId() + ", username =" + user.getUsername());
}
}
}
return "success";
}
运行项目,输入网址:http://localhost:8080/DataBanding/hello/toUserEdit
。选择对象修改,在控制台当中查看输出。