@ModelAttribute使用详解

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

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

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

  1. <span style="font-size:12px;">       @RequestMapping(value = "/helloWorld")
  2. public String helloWorld(String abc) {
  3. return "helloWorld";
  4. }</span>
  5. <span style="font-size:12px;">
  6. </span>

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

  1. <span style="font-size:12px;">@ModelAttribute
  2. public Account addAccount(@RequestParam String number) {
  3. return accountManager.findAccount(number);
  4. }
  5. </span>
  6. <span style="font-size:12px;">
  7. </span>

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

  1. <span style="font-size:12px;">@Controller
  2. public class HelloWorldController {
  3. @ModelAttribute("attributeName")
  4. public String addAccount(@RequestParam String abc) {
  5. return abc;
  6. }
  7. @RequestMapping(value = "/helloWorld")
  8. public String helloWorld() {
  9. return "helloWorld";
  10. }
  11. }</span>
  12. <span style="font-size:12px;">
  13. </span>

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

  1. <span style="font-size:12px;">@Controller
  2. public class HelloWorldController {
  3. @RequestMapping(value = "/helloWorld.do")
  4. @ModelAttribute("attributeName")
  5. public String helloWorld() {
  6. return "hi";
  7. }
  8. }</span>
  9. <span style="font-size:12px;">
  10. </span>

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

(1)从model中获取

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

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

    1. <span style="font-size:12px;">@Controller
    2. public class HelloWorldController {
    3. @RequestMapping(value = "/helloWorld")
    4. public String helloWorld(@ModelAttribute User user) {
    5. return "helloWorld";
    6. }
    7. }</span>
    8. <span style="font-size:12px;">
    9. </span>

@ModelAttribute运用详解(二十一)的更多相关文章

  1. Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务

    配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或 ...

  2. 08_springmvc数据回显和@ModelAttribute注解详解

    一.数据回显 提交后,如果出现错误,将刚才提交的数据回显到刚才的提交页面. 二.pojo数据回显方法 1.springmvc默认对pojo数据进行回显. pojo数据传入controller方法后,s ...

  3. Solon 框架详解(十一)- Solon Cloud 的配置说明

    Solon 详解系列文章: Solon 框架详解(一)- 快速入门 Solon 框架详解(二)- Solon的核心 Solon 框架详解(三)- Solon的web开发 Solon 框架详解(四)- ...

  4. @ModelAttribute运用详解

      @ModelAttribute使用详解 1.@ModelAttribute注释方法     例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个 ...

  5. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  6. (转)spring学习之@ModelAttribute运用详解

    @ModelAttribute使用详解 1 @ModelAttribute注释方法 例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被 ...

  7. [转载]springmvc学习之@ModelAttribute运用详解

    spring学习之@ModelAttribute运用详解 链接

  8. @ModelAttribute注解详解

    @ModelAttribute注解详解 1.@ModelAttribute定义: 被该注解定义的方法,会在该方法所在的controller的任何目标方法执行之前执行 2.@ModelAttribute ...

  9. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

随机推荐

  1. DNS named. bind linux (ACL/View)---dnsmasq-with docker,hosts in docker.

    [bind--named.conf] https://blog.csdn.net/z_yttt/article/details/53020814 [Docker搭建dnsmasq] https://b ...

  2. jira-source--plugin

    X11 forward impact on jira plugin system initialization. 而Linux的curl使用的证书库在文件“/etc/pki/tls/certs/ca- ...

  3. C#桌面程序设计复习

    GGG //屏幕高度 int ScreenH = 1080; this.Location = new Point(this.Location.X, ScreenH - this.Height - 20 ...

  4. git学习------> 解决Gitlab 版本升级之后,发送 merge request 出现 http 500 的返回码错误

    今天有同事在Gitlab上发送 Merge Request的时候,直接出现如下所示的界面,提示http 500,服务器内部出错. 一.错误描述 1.1 创建新的 Merge Request 1.2 填 ...

  5. PHP函数处理方法总结

    call_user_func_array (PHP 4 >= 4.0.4, PHP 5, PHP 7) call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的 ...

  6. C#判断用户是手机访问还是PC访问

    今天在做一个wap网站时,需要限制PC用户访问.网上找了很多资料,效果都不怎么理想.其实原理就是根据HTTP_USER_AGENT判断检查用户在用什么浏览器,再根据业务做相应的逻辑处理. 代码如下: ...

  7. DNS(bind)添加A、CNAME、MX、PTR记录、智能DNS(ACL)

    1.添加一条A记录(记得更改serial): vim /var/named/chroot/etc/lnh.com.zone 重启一下: rndc reload 查看从服务器: 测试结果: master ...

  8. ubuntu16.04(64位)安装 Drcom

    一 : 下载DrClient(DrcomAndPPOE) 解压   下载地址 https://www.baidu.com/s?wd=DrClient(DrcomAndPPOE)&rsv_spt ...

  9. uva11020 set

    有n个人,每个人有两个属性x,y.如果对于一个人P(x,y) 不存在另外一个人(x',y') 使得x'<x,y'<=y 或者 x'<=x,y'<y 我们说p是有优势的,每次给出 ...

  10. Fiddler抓包工具使用方法

    Fiddler是最强大最好用的Web调试工具之一, 它能记录所有客户端和服务器的http和https请求.允许你监视.设置断点.甚至修改输入输出数据.Fiddler包含了一个强大的基于事件脚本的子系统 ...