【SpringMVC】常用注解:@ModelAttribute

news/2025/3/16 23:36:41/

1.作用

该注解是在SpringMVC4.3版本后新加入的。它可以修饰方法和参数。出现在方法上,表示当前方法会在控制器的方法之前执行。它可以修饰 没有返回值的方法,也可以修饰没有返回值的方法。它修饰参数,获取指定 的数据给参数赋值。

当表单提交的不是完整的实体类型数据时,保证没有提交数据的 字段使用数据库对象原来的数据。

例如:我们在编辑一个用户时,用户有一个创建信息的字段,该字段的值是不 允许被修改的。在提交表单数据是肯定没有此字段的内容,一旦更新会把该字段 的内容设置为null。此时就可以使用此注解解决问题。

2.属性

value:用于获取数据的key。可以是POJO属性的名称,也可以是Map结构的key

3.示例

定义POJO

 public class Student {private String username;private String password;private Integer age;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"username='" + username + '\'' +", password='" + password + '\'' +", age=" + age +'}';}
}

定义表单

<form action="demo1/showUser" method="post">
姓名: <input type="text" name="username"><br>
年龄: <input type="text" name="age"><br><input type="submit" value="保存"></form>

这个表单中只提交了两个字段,还有password字段没有提交

定义控制器方法(ModelAttribute注解修饰的方法带返回值)

 @ModelAttributepublic Student showModel(String username,Integer age){System.out.println("用户名:" + username + "年龄" + age);Student student = new Student();student.setUsername(username);student.setAge(18);//模拟根据用户名查询从数据表查询到了一个用户信息
student.setPassword("admin");System.out.println("showModel方法执行了.....");return student;}@RequestMapping("showUser")public String showUser(Student student){System.out.println("showUser方法执行了.....");System.out.println(student);return "success";}

最终输出的User有password的值

定义控制器方法(ModelAttribute注解修饰的方法也可以不带返回值)

@ModelAttributepublic void showModel(String username, Integer age, Map<String, Object> map) {System.out.println("用户名:" + username + "年龄" + age);Student student = new Student();student.setUsername(username);student.setAge(18);student.setPassword("admin"); // 模拟根据用户名查询从数据表查询到用户信息System.out.println("showModel方法执行了.....");map.put("student", student);}@RequestMapping("showUser")public String showUser(@ModelAttribute("student") Student student) {System.out.println("showUser方法执行了.....");System.out.println(student);return "success";}

效果也是一样的


http://www.ppmy.cn/news/1579684.html

相关文章

Qt程序基于共享内存读写CodeSys的变量

文章目录 1.背景2.结构体从CodeSys导出后导入到C2.1.将结构体从CodeSys中导出2.2.将结构体从m4文件提取翻译成c格式 3.添加RTTR注册信息4.读取PLC变量值5.更改PLC变量值 1.背景 在文章【基于RTTR在C中实现结构体数据的多层级动态读写】中&#xff0c;我们实现了通过字符串读写…

Linux中的基本指令(下)

目录 mv指令 more指令 less指令 head指令 tail 指令 继续理解文件 重定向和追加重定向操作 理解管道 find指令 whereis 指令 bc指令 uname ‒r指令 grep 指令 关机 扩展命令 zip/unzip 指令 tar指令 关于rzsz 系统间的文件互传 接上&#xff01; mv指令 m…

3ds Max 导入到 After Effects 还原摄像机要注意事项--deepseek

我&#xff1a;dp我这有两个脚本分别是syn软件相机导出到max的和syn软件相机导出到ae的&#xff0c;你能看出差别来吗&#xff1f;如果我想把max里的相机导入到ae里&#xff0c;保持原来的位置方向&#xff0c;该怎么做 dp&#xff1a;从这两个脚本可以看出&#xff0c;3ds Ma…

乐观锁VS分布式锁实现抢单服务

司机开始接单&#xff0c;乘客填写出发地——目的地&#xff0c;开始下单 service-order模块 Operation(summary"司机抢单") GetMapping("/robNewOrder/{driverId}/{orderId}") public Result<Boolean> robNewOrder(PathVariable Long driverId,P…

c++学习系列----002.写文件

c 写文件 文章目录 c 写文件1️⃣ 使用 ofstream 写入文本文件2️⃣ 追加模式写入3️⃣ 写入二进制文件4️⃣ 使用 fstream 进行读写5️⃣ 使用 fprintf()&#xff08;C 方式&#xff09;6️⃣ 使用 write() 低级 I/O 方式推荐方式 C 写文件的几种方式主要有以下几种&#xff1…

Spring MVC 工作原理和流程

SpringMVC对传统的MVC做了扩展&#xff0c;将model层分为了业务模型Service和数据模型Repository 工作原理 前端的请求会首先进过DispatcherServlet前端调度器&#xff0c;这个组件是整个MVC的核心调度组件&#xff0c;所有请求都经过它的处理和分发。 然后调度器会将路径传递…

深入理解Spring Boot:快速构建现代化的Java应用

大家好&#xff01;今天我们来聊聊Java开发中最流行的框架之一——Spring Boot。Spring Boot是Spring生态系统中的一个重要模块&#xff0c;它旨在简化Spring应用的开发和部署。通过Spring Boot&#xff0c;开发者可以快速构建独立、生产级的应用程序&#xff0c;而无需繁琐的配…

深度学习GRU模型原理

一、介绍 门控循环单元&#xff08;Gated Recurrent Unit, GRU&#xff09; 是一种改进的循环神经网络&#xff08;RNN&#xff09;&#xff0c;专为解决传统RNN的长期依赖问题&#xff08;梯度消失/爆炸&#xff09;而设计。其核心是通过门控机制动态控制信息的流动。与LSTM相…