zoukankan      html  css  js  c++  java
  • @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保存到数据库了

  • 相关阅读:
    Windows下分布式缓存Memcached参数帮助文档
    十条不错的编程观点
    转载志凡:网站技术分析报告之——开心网(kaixin.com)
    转载:由图片SEO想起
    Memcache基础教程
    【C#学习笔记】构造函数重载,构造函数相互调用,静态构造函数
    【C#学习笔记】单精度和双精度浮点型操作留意。
    VB进行子类化
    通过 Apache 配置 Rewrite 支持 .htaccess
    【C#学习笔记】各种定义方法的例子
  • 原文地址:https://www.cnblogs.com/javafucker/p/7510345.html
Copyright © 2011-2022 走看看