Spring MVC的数据绑定(复杂数据绑定——数组与集合)

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 。选择对象修改,在控制台当中查看输出。
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Modify_QmQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值