Spring MVC复杂数据绑定-绑定集合
【图书介绍】《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》_【新华文轩】spring+spring mvc+mybatis从零开始学(视频教学版) 第3版 正版-CSDN博客
《Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书
【图书介绍】案例可借鉴的Spring应用开发书-CSDN博客
Spring MVC简单数据绑定-CSDN博客
在项目中,前端请求传递过来的数据可能会批量包含各种类型的数据,如Integer、String等。这种情况使用数组绑定是无法实现的。针对这种情况,可以使用集合数据绑定,即在包装类中定义一个包含对象类的集合,然后在接收方法中将参数类型定义为该包装类的集合。
【示例12-6】下面以批量修改用户为例讲解一下集合数据绑定的使用。
在src目录下创建一个com.ssm.vo包,并在包中创建包装类UserVo来封装课程集合属性,代码如文件12.13所示。
文件12.13 UserVo.java
01 package com.ssm.vo;
02 import java.util.List;
03 import com.ssm.po.User;
04 /*
05 * 用户包装类
06 */
07 public class UserVo {
08 private List<User> users; //用户列表
09 public List<User> getUsers() {
10 return users;
11 }
12 public void setUsers(List<User> users) {
13 this.users = users;
14 }
15 }
在控制器类 UserController中编写接收批量修改用户的方法,以及向用户修改页面跳转的方法,其代码如下所示:
//向用户批量修改页面跳转
@RequestMapping("/toUserEdit")
public String toUserEdit() {
return "user_edit";
}
//接收批量修改用户的方法
@RequestMapping("/editUsers")
public String editUsers(UserVo userList){
//将所有用户数据封装到集合中
List<User> users=userList.getUsers();
for(User user:users){
if(user.getId()!=null){
System.out.println("修改了id为"+user.getId()+"的用户名为"+
user.getUsername());
}
}
return "success";
}
在上述代码的两个方法中,通过toUserEdit()方法将跳转到user_edit.jsp页面,通过editUsers()方法将执行用户批量更新操作;其中该方法的UserVo类型参数,用于绑定并获取页面传递过来的用户数据。
注意:在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO作为参数,然后在包装POJO中包装一个集合属性。
在项目的/WEB-INF/jsp目录下创建页面文件user_edit.jsp,如文件12.14所示。
文件12.14 user_edit.jsp
01 <%@ page language="java" contentType="text/html; charset=UTF-8"
02 pageEncoding="UTF-8"%>
03 <!DOCTYPE HTML>
04 <html>
05 <head>
06 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
07 <title>修改用户</title>
08 </head>
09 <body>
10 <form action="${pageContext.request.contextPath}/editUsers" method="post">
11 <table>
12 <tr>
13 <td>选择</td>
14 <td>用户名</td>
15 </tr>
16 <tr>
17 <td><input name="users[0].id" value="1" type="checkbox"></td>
18 <td>
19 <input name="users[0].username" value="zhangsan" type="text">
20 </td>
21 </tr>
22 <tr>
23 <td><input name="users[1].id" value="2" type="checkbox"></td>
24 <td>
25 <input name="users[1].username" value="lisi" type="text">
26 </td>
27 </tr>
28 </table>
29 <input type="submit" value="修改"/>
30 </form>
31 </body>
32 </html>
在上述页面代码中,模拟展示了id为1、用户名为zhangsan和id为2、用户名为lisi的两个用户。当单击“修改”按钮后,会将表单提交到一个以editUsers结尾的请求中。
发布并启动项目,在浏览器中访问地址http://localhost:8080/chapter12_war_exploded/ toUserEdit,显示效果如图12.10所示。
图12.10 user_edit.jsp页面
将图12.10所示页面中的用户名zhangsan改为tom,lisi改为rose,并勾选两项数据前面的复选框,然后单击“修改”按钮后,浏览器会跳转到success.jsp页面中。此时控制台的打印信息如图12.11所示。从结果中可以看出,已经成功输出请求中批量修改的用户信息,这就是集合类型的数据绑定。
图12.11 运行结果