1.@ModelAttribute注释方法
    例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。

(1)@ModelAttribute注释void返回值的方法

code
1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller 
    public class HelloWorldController { 
   
        @ModelAttribute 
        public void populateModel(@RequestParam String abc, Model model) { 
           model.addAttribute("attributeName", abc); 
        
   
        @RequestMapping(value = "/helloWorld"
        public String helloWorld() { 
           return "helloWorld"
        
    }

这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了。
这个例子中model属性名称和model属性对象有model.addAttribute()实现,不过前提是要在方法中加入一个Model类型的参数。
    当URL或者post中不包含次参数时,会报错,其实不需要这个方法,完全可以把请求的方法写成,这样缺少此参数也不会出错

code
1
2
3
4
@RequestMapping(value = "/helloWorld"
        public String helloWorld(String abc) { 
           return "helloWorld"
        }

(2)@ModelAttribute注释返回具体类的方法

code
1
2
3
4
@ModelAttribute 
    public Account addAccount(@RequestParam String number) { 
       return accountManager.findAccount(number); 
    }

这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
    这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。
    
    (3)@ModelAttribute(value="")注释返回具体类的方法

code
1
2
3
4
5
6
7
8
9
10
11
12
13
@Controller 
    public class HelloWorldController { 
   
        @ModelAttribute("attributeName"
        public String addAccount(@RequestParam String abc) { 
           return abc; 
        
   
        @RequestMapping(value = "/helloWorld"
        public String helloWorld() { 
           return "helloWorld"
        
    }

这个例子中使用@ModelAttribute注释的value属性,来指定model属性的名称。model属性对象就是方法的返回值。它无须要特定的参数。
    
    (4)@ModelAttribute和@RequestMapping同时注释一个方法

code
1
2
3
4
5
6
7
8
9
@Controller 
    public class HelloWorldController { 
   
        @RequestMapping(value = "/helloWorld.do"
        @ModelAttribute("attributeName"
        public String helloWorld() { 
           return "hi"
        
    }

这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/helloWorld.do"转换为逻辑视图helloWorld。
    Model属性名称有@ModelAttribute(value=””)指定,相当于在request中封装了key=attributeName,value=hi。
    
2.@ModelAttribute注释一个方法的参数

(1)从model中获取

code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller 
    public class HelloWorldController { 
   
        @ModelAttribute("user"
        public User addAccount() { 
           return new User("jz","123"); 
        
   
        @RequestMapping(value = "/helloWorld"
        public String helloWorld(@ModelAttribute("user") User user) { 
           user.setUserName("jizhou"); 
           return "helloWorld"
        
    }

在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。
    此时如果方法体没有标注@SessionAttributes("user"),那么scope为request,如果标注了,那么scope为session
    
    (2)从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)

code
1
2
3
4
5
6
7
8
@Controller 
    public class HelloWorldController { 
   
        @RequestMapping(value = "/helloWorld"
        public String helloWorld(@ModelAttribute User user) { 
           return "helloWorld"
        
    }

注意这时候这个User类一定要有没有参数的构造函数。

Spring中使用@ModelAttribute注解相关推荐

  1. Spring中常见的注解收集

    Spring中常见的注解收集 文章目录 Spring中常见的注解收集 1.@ResponseBody 2.@RequestBody 3.@RequestParam 4.@Controller 5.@R ...

  2. Spring中的@Value注解详解

    本文主要介绍Spring @Value 注解注入属性值的使用方法的分析,文章通过示例代码非常详细地介绍,对于每个人的学习或工作都有一定的参考学习价值 文章目录 概述 使用方式 基于配置文件的注入 基于 ...

  3. Spring中利用java注解声明切面

    Spring中利用java注解声明切面 第一步:确定在Spring的XML文件中包含AOP的命名空间: 第二步:在Spring的XML文件中输入<aop:aspectj-autoproxy/&g ...

  4. Spring 中的各种注解,光会用可不够哦!

    来源:https://digdeep.cnblogs.com/digdeep/p/4525567.html 1. Java中的注解 2. 使用 元注解 来自定义注解 和 处理自定义注解 3. spri ...

  5. 详细讲解Spring中的@Bean注解

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/weixin_42140261/ article/details/104864333 随着SpringBoot的流行,我们现在更 ...

  6. Spring中的@ConditionalOnProperty注解

    1.概述 介绍@ConditionalOnProperty注解的主要目的. 2.@ConditionalOnProperty的目的 通常,在开发基于Spring的应用程序时,可能需要根据配置属性的存在 ...

  7. springMVC中的@ModelAttribute注解

    springMVC小总结 常用注解总结 以下内容是我个人对@ModelAttribute注解的见解,如有错误请批评指正!!! 例子中用到的代码:代码获取 @ModelAttribute注解 1.作用: ...

  8. Spring中如何使用注解来配置Bean?有哪些相关的注解?

    首先需要在Spring配置文件中增加如下配置: <context:component-scan base-package="org.example"/> 然后可以用@C ...

  9. 在spring中使用自定义注解注册监听器

    2019独角兽企业重金招聘Python工程师标准>>> 接口回调 监听器本质上就是利用回调机制,在某个动作发生前或后,执行我们自己的一些代码.在Java语言中,可以使用接口来实现. ...

最新文章

  1. python中PIL.Image和OpenCV图像格式相互转换
  2. junit5_JUnit 5和Selenium –使用Selenium内置的`PageFactory`实现页面对象模式
  3. python文件操作二
  4. TypeScript React
  5. windows 下安装Simplejson方法
  6. Linux(CentOS7.1)修改默认yum源为国内的阿里云yum源
  7. 虚拟机设置静态IP地址
  8. 吴军,数学通识50讲
  9. 新零售电商:订单管理系统设计
  10. OTFS调制中的干扰分析
  11. 「LCA」[USACO10HOL]牛的政治Cow Politics
  12. GisToSWMM5简介
  13. 2021年煤矿井下爆破考试内容及煤矿井下爆破考试资料
  14. python计算1的平方减2的平方加3的平方减4的平方怎么算_计算1的平方减2的平方加3的平方减4的平方 – 手机爱问...
  15. gsoap 命令参数介绍(wsdl2和soapcpp)
  16. python 网格交易源码_【宽客策略源码】网格交易(期货)
  17. 照相馆里的魔术师-数码照片处理大全
  18. STM51嵌入式开发入门软件安装-Keil、stc、驱动
  19. python爬虫练习五(补充): 2018年统计用区划代码和城乡划分代码(附代码与全部数据)
  20. QML类型:ApplicationWindow

热门文章

  1. 机器人编程语言python-10大热门机器人编程语言,你掌握了哪种?
  2. python基础教程是什么意思-python基础教程都有什么?
  3. 学python可以做什么职业好-学了那么多年python到底可以找什么工作?
  4. python装饰器函数-python函数装饰器之带参数的函数和带参数的装饰器用法示例
  5. python3.7.2安装-CentOS 7中Python3.7.2的安装
  6. pythonurllib模块-Python3中核心模块urllib的用法大全
  7. python线下培训-Python培训是应该选择线上还是线下呢?
  8. python条件语句-Python中条件判断语句的简单使用方法
  9. 学python可以做什么知乎-学会python有哪些好处?python抓取知乎神回复
  10. UVa213 - Message Decoding