SpringMVC pasa y recibe parámetros de matriz o lista

Cuando un usuario activa una determinada solicitud en la página, algunos parámetros (clave / valor) suelen pasar a segundo plano. En SpringMVC, puede vincular los datos clave / valor solicitados por el cliente a los parámetros formales del método del procesador del controlador a través de la vinculación de parámetros.

A veces, los datos solicitados por el front-end están en lotes y, en este momento, se requiere que el lado web obtenga estos parámetros de solicitud por lotes al procesar la solicitud. Generalmente, los parámetros de solicitud por lotes se reciben en forma de matrices o colecciones en Java, y SpringMVC proporciona un mecanismo para recibir y analizar datos y tipos de parámetros de colección.

Artículo recomendado: "Enlace de parámetros de solicitud SpringMVC y el uso de la anotación @RequestParam"

1. Solicitar parámetros de tipo de matriz 

Para los parámetros de solicitud del tipo de matriz, puede aparecer un formulario similar a una casilla de verificación en la página HTML, lo que permite al usuario seleccionar uno o más datos para la operación.

[Ejemplo] Para implementar la función de eliminación por lotes, seleccione una o más información de usuario a través de la casilla de verificación en la página HTML y envíelo en segundo plano El método en segundo plano El controlador Controller obtiene los parámetros de solicitud del tipo de arreglo.

(1) Cree una página HTML, seleccione una o más información de usuario a través de la casilla de verificación y envíela a un segundo plano.

<!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>

Resultado de ejecución de la página:

(2) Escriba el método de ejecución en el controlador para obtener los parámetros de solicitud del tipo de matriz.

/**
 * 批量删除用户信息
 * @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;
}

Nota: La declaración @RequestParam (value = "userIds []") debe agregarse a la declaración de parámetros del método del controlador en segundo plano; de lo contrario, no se puede obtener la matriz de ID de usuario enviada.

La salida de la consola: 

 

2. Parámetros de solicitud de tipo de lista

Parámetro de solicitud de tipo de lista. Cuando desee convertir los datos por lotes en la página en un objeto de tipo Lista en el lado web a través de SpringMVC, el adaptador de procesador convertirá el formato y analizará los parámetros de solicitud en la colección Lista correspondiente.

[Ejemplo] Para realizar la función de adición de lotes, la página HTML de front-end envía múltiples piezas de información del usuario, y el método en el controlador Controller de back-end obtiene los parámetros de solicitud del tipo List.

(1) Cree una página HTML y envíe varias piezas de información del usuario al controlador en segundo plano.

<!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) Cree una clase de entidad de información de usuario (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) Escriba el método de ejecución en el Controlador para obtener los parámetros de solicitud del tipo Lista.

/**
 * 批量新增用户信息
 * @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;
}

Nota: La anotación @RequestBody debe agregarse a la declaración de parámetros del método del controlador en segundo plano. La característica de la anotación @RequestBody es determinar si se debe convertir el formato relevante a la clase de empaquetado de acuerdo con el tipo de contenido del parámetro de solicitud. Si el tipo de contenido es el tipo de destino, simplemente convierta. Lo que se convierte aquí son datos JSON, y todos los requisitos son especificar el tipo de contenido de la solicitud de front-end como el tipo "application / json".

La salida de la consola: 

 

Supongo que te gusta

Origin blog.csdn.net/pan_junbiao/article/details/109778471
Recomendado
Clasificación