绑定数组
在实际开发时,可能会遇到前端请求需要传递到后台一个或多个相同名称参数的情况(如批量删除),此种情况采用前面讲解的简单数据绑定的方式显然是不合适的。此时,就可以使用绑定数组的方式,来完成实际需求。
下面通过一个批量删除用户的例子来详细讲解绑定数组的操作,其具体实现步骤如下。
(1)在chapter13项目的/WEB-INF/jsp目录下,创建一个展示用户信息的列表页面user.jsp,编辑后的代码如文件1所示。
文件1 user.jsp
1 <%@ page language="java" contentType="text/html; charset=UTF-8"
2 pageEncoding="UTF-8"%>
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <title>用户列表</title>
7 </head>
8 <body>
9 <form action="${pageContext.request.contextPath }/deleteUsers"
10 method="post">
11 <table width="20%" border=1>
12 <tr>
13 <td>选择</td>
14 <td>用户名</td>
15 </tr>
16 <tr>
17 <td><input name="ids" value="1" type="checkbox"></td>
18 <td>tom</td>
19 </tr>
20 <tr>
21 <td><input name="ids" value="2" type="checkbox"></td>
22 <td>jack</td>
23 </tr>
24 <tr>
25 <td><input name="ids" value="3" type="checkbox"></td>
26 <td>lucy</td>
27 </tr>
28 </table>
29 <input type="submit" value="删除"/>
30 </form>
31 </body>
32 </html>
在上述页面代码中,定义了3个name属性相同而value属性值不同的复选框控件,并在每一个复选框对应的行中编写了一个对应用户。在单击“删除”按钮执行删除操作时,表单会提交到一个以“/deleteUsers”结尾的请求中。
(2)在控制器类UserController中,编写接收批量删除用户的方法(同时为了方便向用户列表页面跳转,还需增加一个向user.jsp页面跳转的方法),其代码如下所示。
/**
* 向用户列表页面跳转
*/
@RequestMapping("/toUser")
public String selectUsers( ) {
return "user";
}
/**
* 接收批量删除用户的方法
*/
@RequestMapping("/deleteUsers")
public String deleteUsers(Integer[] ids) {
if(ids !=null){
for (Integer id : ids) {
// 使用输出语句模拟已经删除了用户
System.out.println("删除了id为"+id+"的用户!");
}
}else{
System.out.println("ids=null");
}
return "success";
}
在上述代码中,先定义了一个向用户列表页面user.jsp跳转的方法,然后定义了一个接收前端批量删除用户的方法。在删除方法中,使用了Integer类型的数组进行数据绑定,并通过for循环执行具体数据的删除操作。
(3)发布项目到Tomcat服务器并启动后,在浏览器中访问地址http://localhost:8080/chapter13/toUser
,其显示效果如图1所示。
图1 user.jsp用户列表页面
勾选图1中的全部复选框,然后单击“删除”按钮,这样程序在正确执行后会跳转到succe.jsp页面。此时控制台的打印信息,如图2所示。
图2 运行结果
从图2可以看出,已成功执行了批量删除操作,这就说明已成功实现了数组类型的数据绑定。