@ModelAttribute注解的详解

@ModelAttribute注解的详解

1.@ModelAttribute定义:

被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行

2.@ModelAttribute使用:

1)应用场景:

当我们需要修改一个user的信息时,我们希望只修改部分属性值,其他属性值保留。

这个时候我们就需要用@ModelAttribute定义一个方法,这个方法在目标方法执行之前执行。

先到数据库查询到需要修改的user,转到目标方法,将表单的数据赋值到这个user中,最后将user作为目标方法的入参传给目标方法处理。

由于我们先从数据库中查询到了user,并将表单中的数据(这些数据只是user实体中的部分属性)赋值给该user,这样我们就达到了我们的需求。

即:当我们需要修改一个user的信息时,我们希望只修改部分属性值,其他属性值保留。

2)代码:

    @ModelAttribute
    public void getUser(@RequestParam(value="id", required=false) Integer id, Map<String, Object> map){
        if(id!=null){
            User user = new User();  //模拟从数据库中取出user
            map.put("user", user);
        }
    }

注意:

1.@RequestParam注释中一定要添加required=false,为什么?我们想一想,被@RequestParam修饰的方法会在所有(有关的、无关的)目标方法执行之前执行,

  如果某个方法的请求没有请求参数id,那么将会抛出异常

2.将查询到的user保存到map中

    @RequestMapping(value="/userOption", method=RequestMethod.PUT)
    public String modifyUser(User user){
        System.out.println(user);
        return "success";
    }

注意:

1.在@ModelAttribute方法结束,目标方法开始之前,springmvc为我们做了一件事:从map中取出user,将表单数据赋值给user,将user传给目标方法的入参

2.这时,目标方法的入参user就是我们修改过后的user(包括修改过的数据和没被修改的数据),之后我们就可以将use保存到数据库了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏奔跑的蛙牛技术博客

javaBean 简单理解JavaBean简单及使用

PO:persistant object持久对象,可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用P...

1504
来自专栏一个会写诗的程序员的博客

Springboot Application 集成 OSGI 框架开发

是 Java 类加载层次中最顶层的类加载器,负责加载 JDK 中的核心类库,如:rt.jar、resources.jar、charsets.jar 等

1382
来自专栏LeoXu的博客

Tapestry 教程(六)使用BeanEditForm来创建用户表单

在前面一章,我们看到了Tapestry如何处理简单地链接,甚至于处理能在URL中传递信息的链接。在本章,我们将会看到Tapestry如何以不同的方式做同样的事情...

1062
来自专栏知识分享

关于原子哥ENC28J60网络通信模块接收数据代码的一点疑惑

---恢复内容开始--- 这几天做STM32的ENC28J60网络通信模块,自己在原子哥的代码上进行修改测试,,发现一个问题,电脑和板子进行通信的时候总隔一段时...

3608
来自专栏Golang语言社区

Golang 序列化之 ProtoBuf

ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程...

4579
来自专栏技术墨客

Hazelcast集群服务(2)——Hazelcast基本配置

    在入门及使用案例一文介绍了什么是Hazelcast,并展示了一个简单的使用例子。原理大家都懂了,后面的篇章会给兄弟们更多干货。

4093
来自专栏13blog.site

MyBatis + MySQL返回插入成功后的主键id

这是最近在实现perfect-ssm中的一个功能时碰到的一个小问题,觉得需要记录一下,向MySQL数据库中插入一条记录后,需要获取此条记录的id值,以生成对应的...

3226
来自专栏Java帮帮-微信公众号-技术文章全总结

Spring scope 作用域

Spring scope 作用域 今天研究了一下scope的作用域。默认是单例模式,即scope="singleton"。 另外scope还有prototype...

3765
来自专栏向治洪

Gradle详解

Gradle简介 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具,gradle跟ant、maven一样,是一种依赖...

2147
来自专栏Java 源码分析

MyBatis笔记二:配置

1516

扫码关注云+社区

领取腾讯云代金券