Когда пользователь запускает определенный запрос на странице, некоторые параметры (ключ / значение) обычно переходят в фоновый режим. В SpringMVC вы можете привязать данные ключ / значение, запрошенные клиентом, к формальным параметрам метода процессора контроллера через привязку параметров.
Иногда данные, запрашиваемые интерфейсом, предоставляются пакетами, и в это время веб-сторона должна получить эти параметры пакетного запроса при обработке запроса. Как правило, параметры пакетного запроса принимаются в форме массивов или коллекций в Java, а SpringMVC предоставляет механизм для получения и анализа данных и типов параметров коллекции.
Рекомендуемая статья: «Связывание параметров запроса SpringMVC и использование аннотации @RequestParam»
1. Запросить параметры типа массив
Для параметров запроса типа массива на HTML-странице может появиться форма в виде флажка, позволяющая пользователю выбрать один или несколько данных для работы.
[Пример] Чтобы реализовать функцию пакетного удаления, выберите одну или несколько пользовательских данных с помощью флажка на странице HTML и отправьте их в фоновый режим.Метод в контроллере фонового контроллера получает параметры запроса типа массива.
(1) Создайте HTML-страницу, выберите одну или несколько информации о пользователе с помощью флажка и отправьте ее в фоновый режим.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组类型的请求参数</title>
<meta name="author" content="pan_junbiao的博客">
<style>
table { border-collapse: collapse;}
table,table tr th, table tr td { border:1px solid #000000; text-align: center; padding: 5px;}
.u_button{padding: 5px; margin-top: 10px;}
</style>
</head>
<body>
<body>
<table>
<tr>
<th><input type="checkbox" id="checkAll" /></th>
<th>编号</th>
<th>用户名称</th>
<th>博客信息</th>
</tr>
<tr>
<td><input type="checkbox" name="checkItem" value="1"/></td>
<td>1</td>
<td>pan_junbiao的博客</td>
<td>您好,欢迎访问 pan_junbiao的博客</td>
</tr>
<tr>
<td><input type="checkbox" name="checkItem" value="2"/></td>
<td>2</td>
<td>pan_junbiao的博客</td>
<td>https://blog.csdn.net/pan_junbiao</td>
</tr>
<tr>
<td><input type="checkbox" name="checkItem" value="3"/></td>
<td>3</td>
<td>pan_junbiao的博客</td>
<td>您好,欢迎访问 pan_junbiao的博客</td>
</tr>
<tr>
<td><input type="checkbox" name="checkItem" value="4"/></td>
<td>4</td>
<td>pan_junbiao的博客</td>
<td>https://blog.csdn.net/pan_junbiao</td>
</tr>
<tr>
<td><input type="checkbox" name="checkItem" value="5"/></td>
<td>5</td>
<td>pan_junbiao的博客</td>
<td>您好,欢迎访问 pan_junbiao的博客</td>
</tr>
</table>
<input type="button" class="u_button" value="反选" id="btnCheckedRev"/>
<input type="button" class="u_button" value="批量删除" id="btnBatchDelete"/>
</body>
</body>
<script src="/js/jquery-3.4.1.min.js"></script>
<script>
$(document).ready(function() {
//全选
$("#checkAll").click(function () {
$("[name=checkItem]:checkbox").prop("checked", this.checked);
});
//复选框组的联动效果
$("[name=checkItem]:checkbox").click(function () {
var flag = true;
$("[name=checkItem]:checkbox").each(function () {
if (!this.checked) {
flag = false;
}
});
$("#checkAll").prop("checked", flag);
});
//反选
$("#btnCheckedRev").click(function () {
$("[name=checkItem]:checkbox").each(function () {
this.checked = !this.checked;
});
});
//批量删除事件
$("#btnBatchDelete").click(function () {
let idArray = new Array(); //批量删除的员工ID数组
$("[name=checkItem]:checkbox:checked").each(function (index) {
idArray.push($(this).val());
});
if (idArray.length == 0) {
alert("请选择要删除的用户!");
return;
}
if (!confirm("确定删除记录吗?")) {
return;
}
//执行Ajax请求
$.ajax({
type: "POST",
url: "/user/batchDeleteUser",
data: {userIds: idArray},
success: function (result) {
if (result == true) {
alert("删除成功");
}
else {
alert("删除失败");
}
}
});
});
});
</script>
</html>
Результат выполнения страницы:
(2) Запишите метод выполнения в Контроллер, чтобы получить параметры запроса типа массива.
/**
* 批量删除用户信息
* @param userIds 数组
* @author pan_junbiao
*/
@RequestMapping("/batchDeleteUser")
@ResponseBody
public boolean batchDeleteUser(@RequestParam(value="userIds[]") Integer[] userIds)
{
//参数验证
if (userIds == null || userIds.length == 0)
{
return false;
}
//打印数组
System.out.println("用户编号:");
Arrays.stream(userIds).forEach(System.out::println);
//执行后台批量删除(忽略代码)
return true;
}
Примечание. Оператор @RequestParam (value = "userIds []") должен быть добавлен к объявлению параметра метода фонового контроллера, иначе полученный массив идентификаторов пользователей не может быть получен.
Вывод консоли:
2. Параметры запроса типа списка
Параметр запроса типа списка. Если вы хотите преобразовать пакетные данные на странице в объект типа List на веб-стороне через SpringMVC, адаптер процессора преобразует формат и проанализирует параметры запроса в соответствующую коллекцию List.
[Пример] Чтобы реализовать функцию пакетного добавления, внешняя HTML-страница отправляет несколько частей пользовательской информации, а метод в контроллере внутреннего контроллера получает параметры запроса типа List.
(1) Создайте HTML-страницу и отправьте несколько частей пользовательской информации в фоновый контроллер.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>List类型的请求参数</title>
<meta name="author" content="pan_junbiao的博客">
<style>
.u_button{padding: 5px; margin-top: 10px;}
</style>
</head>
<input type="button" class="u_button" value="批量新增" id="btnBatchAdd"/>
<body>
</body>
<script src="/js/jquery-3.4.1.min.js"></script>
<script>
$(document).ready(function()
{
//批量删除事件
$("#btnBatchAdd").click(function() {
//创建用户列表
let userList = [];
userList.push({userId: 1, userName: "pan_junbiao的博客", blogRemark: "您好,欢迎访问 pan_junbiao的博客"});
userList.push({userId: 2, userName: "pan_junbiao的博客", blogRemark: "https://blog.csdn.net/pan_junbiao"});
userList.push({userId: 3, userName: "pan_junbiao的博客", blogRemark: "您好,欢迎访问 pan_junbiao的博客"});
userList.push({userId: 4, userName: "pan_junbiao的博客", blogRemark: "https://blog.csdn.net/pan_junbiao"});
userList.push({userId: 5, userName: "pan_junbiao的博客", blogRemark: "您好,欢迎访问 pan_junbiao的博客"});
//执行Ajax请求
$.ajax({
type: "POST",
url: "/user/batchAddUser",
dataType: "json",
contentType: "application/json; charset=UTF-8",
data: JSON.stringify(userList), //转换为JSON
success: function (result) {
if (result == true) {
alert("新增成功");
}
else {
alert("新增失败");
}
}
});
});
});
</script>
</html>
(2) Создайте класс сущности информации о пользователе (UserInfo.java).
package com.pjb.entity;
/**
* 用户信息实体类
* @author pan_junbiao
**/
public class UserInfo
{
private int userId; //用户编号
private String userName; //用户姓名
private String blogRemark; //博客信息
//省略getter与setter方法...
@Override
public String toString()
{
return "编号:" + this.userId + " 用户:" + this.userName + " 博客:" + this.blogRemark;
}
}
(3) Запишите метод выполнения в Контроллер, чтобы получить параметры запроса типа List.
/**
* 批量新增用户信息
* @param userInfoList 列表
* @author pan_junbiao
*/
@RequestMapping("/batchAddUser")
@ResponseBody
public boolean batchAddUser(@RequestBody List<UserInfo> userInfoList)
{
//参数验证
if (userInfoList == null || userInfoList.size()==0)
{
return false;
}
//打印数组
System.out.println("用户列表:");
userInfoList.stream().forEach(System.out::println);
//执行后台批量新增(忽略代码)
return true;
}
Примечание: аннотацию @RequestBody необходимо добавить к объявлению параметра метода фонового контроллера.Особенность аннотации @RequestBody состоит в том, чтобы определить, нужно ли преобразовывать соответствующий формат в класс упаковки в соответствии с Content-Type параметра запроса. Если Content-Type является целевым типом, просто конвертируйте. Здесь конвертируются данные JSON, и все требования заключаются в том, чтобы указать Content-Type внешнего запроса как тип «application / json».
Вывод консоли: