当前位置: 首页 > news >正文

【SpringMVC】常用注解:@ModelAttribute

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;
    }
    @Override
    public 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注解修饰的方法带返回值)

 @ModelAttribute
 public 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注解修饰的方法也可以不带返回值)

@ModelAttribute
    public 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";
    }

效果也是一样的

相关文章:

  • java手机号、邮箱、日期正则表达式
  • 【一起来学kubernetes】12、k8s中的Endpoint详解
  • 2024年12月CCF-GESP编程能力等级认证C++编程四级真题解析
  • 【FPGA实战】Verilog实现DE2-115的流水灯控制
  • 自动化测试-网页聊天室
  • 模型评估——acc、P、R、F值、交叉验证、K折交叉验证
  • 方差,协方差及协方差矩阵的计算
  • 二分+前缀和/滑动窗口——成绩统计
  • Linux黑科技防裁防背锅六芒星战阵
  • MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景
  • 2021-05-23 C++百元百鸡
  • Python+Selenium
  • 问题二:整形提升
  • Python基础入门掌握(八)
  • Netty 连接存活检测——如何判断连接是否断开?
  • 【设计模式】建造者模式
  • Linux系统中查询命令行解释器
  • leetcode 75.颜色分类(荷兰国旗问题)
  • 基于 Docker 搭建 FRP 内网穿透开源项目
  • 2023南京理工大学计算机复试上机真题
  • 北京动物园:大熊猫“萌兰”没有参加日本大阪世博会的计划
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • 遭遇大规模停电,西班牙内政部宣布进入国家紧急状态
  • 江苏银行一季度净赚近98亿增逾8%,不良贷款率微降
  • “五一”假期全国口岸日均出入境人员将达215万人次
  • IPO周报|4月最后2只新股周一申购,今年以来最低价股来了