【Spring】— Spring MVC复杂数据绑定

目录

  • 复杂数据绑定
    • 1.绑定数组
    • 2.绑定集合

复杂数据绑定

实际项目开发中,除了简单数据类型外,还会经常遇到一些比较复杂的数据绑定问题,比如数组的绑定、集合的绑定,接下来将具体讲解一下数组绑定和集合绑定的使用。

1.绑定数组

在实际开发时,可能会遇到前端请求需要传递到后台一个或多个相同名称参数的情况(如批量删除),此时不适合采用简单数据绑定,而可以使用绑定数组的方式。

【示例12-5】下面通过一个批量删除用户的例子来详细讲解绑定数组的操作。

步骤01 在chapter12项目的WEB-INF/jsp目录下创建一个展示课程信息的列表页面course.jsp。

在这里插入图片描述
在上述页面代码中定义了3个name属性相同而value属性值不同的复选框控件,并在每一个复选框对应的行中编写了一个对应课程。在单击“删除”按钮执行删除操作时,表单会提交到一个以“/ deleteCourse”结尾的请求中。

步骤02 在控制器类CourseController中编写接收批量删除课程的方法(同时为了方便向课程列表页面跳转,还需增加一个向course.jsp页面跳转的方法)。

在这里插入图片描述
在上述代码中,先定义了一个向课程列表页面course.jsp跳转的方法toCourse(),然后定义了一个接收前端批量删除用户的方法。在删除方法中使用了Integer类型的数组进行数据绑定,并通过for执行具体数据的删除操作。

步骤03 发布并启动项目,在浏览器中访问地址http://localhost:8080/chapter12/toCourse。

在这里插入图片描述
勾选图中的全部复选框,然后单击“删除”按钮,程序在正确执行后会跳转到success.jsp页面。

2.绑定集合

在项目中,前端请求传递过来的数据可能会批量包含各种类型的数据,如Integer、String等。这种情况使用数组绑定是无法实现的。针对这种情况,可以使用集合数据绑定,即在包装类中定义一个包含对象类的集合,然后在接收方法中将参数类型定义为该包装类的集合。

【示例12-6】下面以批量修改用户为例讲解一下集合数据绑定的使用。

步骤01 在src目录下创建一个com.ssm.vo包,并在包中创建包装类UserVo来封装课程集合属性。

在这里插入图片描述
步骤02 在控制器类 UserController中编写接收批量修改用户的方法,以及向用户修改页面跳转的方法,其代码如下所示。

在这里插入图片描述
在上述代码的两个方法中,通过toUserEdit()方法将跳转到user_edit.jsp页面,通过editUsers()方法将执行用户批量更新操作,其中该方法的UserVo类型参数用于绑定并获取页面传递过来的用户数据。

注意

在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO作为参数,然后在包装POJO中包装一个集合属性。

步骤03 在WEB-INF/jsp目录下创建页面文件user_edit.jsp。

在这里插入图片描述
在上述页面代码中,模拟展示了id为1、用户名为zhangsan和id为2、用户名为lisi的两个用户。当单击“修改”按钮后,会将表单提交到一个以“editUsers”结尾的请求中。

步骤04 发布并启动项目,在浏览器中访问地址http://localhost:8080/chapter12/toUserEdit即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4761.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

adb 工具

小白初如嵌入式的坑,对于串口调试工具,之前一直只知道有SecureCRT这一种方式; 但是在最近一次的使用过程中,发现抢占资源的情况出现,两个进程之间相互打架,这个时候需要 查看top(嵌入式板子资…

此导入从不用作值,必须使用 “import type“ ,因为 “importsNotUsedAsValues“ 设置为 “error“。

前言 最近电脑更新了一次系统,重启后在 VsCode中打开项目 ,发现原本正常的代码出现了一堆语法提示。网上搜了一下,没有找到关于此问题的回答,不知道我是不是第一个遇到的。在此记录一下这次的经历,如果有其他人遇到&a…

数据结构--队列的基本概念

数据结构–队列的基本概念 队列的定义 队列其实是一种受限制的线性表 队列(Queue):是 只允许在一端进行插入或删除操作 \color{red}只允许在一端进行插入或删除操作 只允许在一端进行插入或删除操作的线性表 重要术语: 队头、队尾、空队列 队列的特点: 先进先出 \…

5.4.1 虚拟专用网VPN

5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议(5.3.1 因特网的路由协议(一)、5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议、5.3.3 因特网的路由协议(三)OSPF协议、5.3.4 因特…

ModaHub魔搭社区:向量数据库Milvus性能调优教程(二)

目录 索引 其他 存储优化 常见问题 索引 向量索引的基本概念请参考 向量索引概述。 选择合适的索引需要在存储空间、查询性能、查询召回率等多个指标中权衡。 FLAT 索引 FLAT 是对向量的暴力搜索(brute-force search),速度最慢&#…

CMake使用gRPC(Protobuf) 的c++ demo

gRPC的命令参数里, 1. 如果要用pacakge,需要--proto_path的参数, 例如helloworld.proto的绝对路径是 /home/user/grpc_demo_ws/grpc_demo/hello_world/proto/helloworld.proto 在helloworld.proto里面的pacakge是 package grpc_demo.hello_w…

模仿QQ之右键菜单

参考:QT多级菜单 - 知乎 (zhihu.com) 运行效果图: 关键代码: void personMenu::contextMenuEvent(QContextMenuEvent *event) {//我完全可以写出一个代码生成器来把这些代码生成出来。parentnew QMenu(this);parent->addAction(QIcon(…

【玩转循环】探索Python中的无限可能性

前言 循环可能是每个编程语言中使用比较多的语法了,如果能合理利用好循环,就会出现意想不到的结果,大大地减少代码量,让机器做那些简单枯燥的循环过程,今天我将为大家分享 python 中的循环语法使用。🚗&am…

【NOSQL】redis哨兵模式、集群搭建

目录 一、redis高可用一、Redis主从复制1.1主从复制的作用1.2主从复制流程 二、搭建Rdeis主从复制2.1安装redis2.1.1环境准备2.1.2安装redis2.1.3设置环境变量2.1.4定义systemd服务管理脚本 2.2修改 Redis 配置文件(Master节点操作2.3修改 Redis 配置文件&#xff0…

SpringBoot项目-双人对战五子棋实验报告

简单五子棋Web项目报告 课 程 Web应用程序设计 项目名称 简单双人五子棋对战 成绩 专业班级 XXX 组别 无 学号 XXX 指导教师 XXX 姓 名 XXX 同组人姓名 无 完成日期 XXX 功能描述 1.用户的注册及登录功能 玩家可以在完成游戏账户的注册&#xff0c…

CentOS Stream 10 计划已启动,即将进入初始化阶段

导读 但初始化的 CentOS Stream 10 暂时不会对外开放,也不会有太多活跃信息。从 Fedora 周期的规律来看,至少还有六个月的时间,CentOS Stream 10 才会正式启动开发流程,接受来自外部的贡献。周五的公告指出:你会看到 C…

STM32文档

一、寄存器缩写 二、存储器和总线构架 DMA,全称为:Direct Memory Access,即直接存储器访问 简而言之,DMA就是将一个内存里的数据搬运到另一个内存里,此过程无需CPU直接控制输出 系统架构存储器组织存储器映射&#xf…