`

@ModelAttribute注解的使用

 
阅读更多

 

@ModelAttribute最主要的作用是将数据添加到模型对象中,用于视图页面展示时使用。但是根据@ModelAttribute注释的位置不同,和其他注解组合使用,致使含义有所不同。

 

1.@ModelAttribute注释方法 

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

 

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

 

@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方法之前先被调用,它把请求参数abc的值加入到一个名为attributeName的model属性中,然后带着这个参数执行helloWorld方法

 

 

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

 

@ModelAttribute 
public Account addAccount(@RequestParam String number) { 
    return accountManager.findAccount(number); 
} 
@RequestMapping(value = "/helloWorld") 
public String helloWorld(Account account) { 
    return "helloWorld"; 
} 

 这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。不过名称不一致时,类一致也能获取到,比如上面helloWorld方法参数名account改成其他名称也是能获取到数据的

 

(3)@ModelAttribute(value="")注释返回具体类的方法

 

@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属性值就是方法的返回值。它的作用相当于model.addAttribute("attributeName",abc);

 

 

(4)@ModelAttribute和@RequestMapping同时注释一个方法

 

@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中取值(测试来看,不做这个注释也能取到值)

 

@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对象)

@Controller 
public class HelloWorldController { 
     @RequestMapping(value = "/helloWorld") 
     public String helloWorld(@ModelAttribute User user) { 
         return "helloWorld"; 
     } 
}

 

 

 

 

分享到:
评论

相关推荐

    06@ModelAttribute注解.md

    06@ModelAttribute注解.md

    java中@ModelAttribute注解的作用

    为了解决这个问题,我们可以使用`@ModelAttribute`注解配合一个方法,如例子所示: ```java @ModelAttribute public void getUsers(@RequestParam(value="name", required=false) String name, Map, Object> map){ ...

    spring mvc中的@ModelAttribute注解示例介绍

    在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,主要用于数据绑定...在实际项目中,`@ModelAttribute`经常与其他注解如`@RequestParam`、`@PathVariable`等配合使用,实现灵活的数据处理和路由功能。

    ModelAttribute注解详细使用.docx

    ### ModelAttribute注解详解 在Spring MVC框架中,`@ModelAttribute`注解是一个非常重要的工具,它主要用于将请求参数绑定到Model对象上。这不仅提高了数据处理的灵活性,还简化了控制器方法的设计。 #### 一、`@...

    SpringMVC @ModelAttribute应用

    在Spring MVC框架中,`@ModelAttribute`是一个非常重要的注解,它主要用于数据绑定,帮助开发者在控制器方法中接收和处理请求参数。这篇文章将深入探讨`@ModelAttribute`的应用及其背后的原理。 `@ModelAttribute`...

    Spring MVC 之@ModelAttribute使用.rar

    当`@ModelAttribute`注解在控制器方法的返回值上时,Spring MVC会将返回的对象添加到Model中,以便在视图层中使用。这样,我们可以在视图层通过EL表达式(Expression Language)访问这些对象的属性。 例如,假设...

    Spring3MVC 在JSP中使用@ModelAttribute

    本文将深入探讨在JSP中如何使用`@ModelAttribute`,以及它在实际开发中的应用。 首先,`@ModelAttribute`通常用在控制器(Controller)方法的参数上,它的主要作用是将HTTP请求中的数据与Java对象进行映射,从而...

    spring学习教程之@ModelAttribute注解运用详解

    下面我们将详细介绍@ModelAttribute注解的使用方法和示例代码。 一、@ModelAttribute注释方法 @ModelAttribute注解可以用于标记一个方法,该方法将在控制器的每个方法执行前被执行。例如: ```java @Controller ...

    spring mvc中注解@ModelAttribute的妙用分享

    文章中提到的创新性使用方式是创建一个基础控制器类(BaseController),在其中利用`@ModelAttribute`注解来初始化`HttpServletRequest`、`ModelMap`和`HttpServletResponse`,这样在子控制器中就可以直接访问这些...

    modelAttribute详解

    - 当使用`@ModelAttribute`注解进行数据绑定时,该注解的参数可以省略不写,默认情况下,Spring MVC会使用POJO类名的首字母小写形式作为模型属性名。 - 如果显式地为`@ModelAttribute`提供`value`属性值,则在前端...

    PNC_Lab04:Ingreso产品@Valid @ModelAttribute和BindingResult。 SpringMVC

    当请求被处理时,Spring MVC会自动调用相应的验证规则,这些规则通常在实体类的属性上定义(如使用`@NotNull`, `@Size`, `@Pattern`等注解)。如果验证失败,Spring将不会执行方法,而是将错误信息存储起来供后续...

    SpringMVC基础—— ModelAttribute和 SessionAttribute.docx

    // 接下来处理@ModelAttribute注解的方法 for (ModelAttributeMethodProcessor methodProcessor : this.modelAttributeProcessors) { if (methodProcessor.supportsMethodArgumentType(methodArgument)) { ...

    [Spring MVC] - ModelAttribute使用.docx

    当我们在一个控制器方法的参数上使用`@ModelAttribute`时,Spring MVC会尝试从请求中获取与注解参数名相匹配的数据,例如表单提交的数据或URL路径变量。然后,这些数据会被用来初始化或者更新一个模型实体对象。例如...

    SpringMVC ModelAttribute详解.docx

    在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,它是数据绑定和模型对象创建的关键。本文将深入探讨`@ModelAttribute`的工作原理及其常见应用场景。 首先,`@ModelAttribute`注解可以用于两个...

    SpringBoot_113实用知识库分享

    SpringBoot 提供了多种方式来使用 @ModelAttribute 注解,包括使用 @ModelAttribute 注解来绑定对象、使用 @ModelAttribute 注解来绑定 List 对象等。 11. SpringBoot+Maven 多模块项目的构建、运行、打包实战 ...

    SPRING MVC 的请求参数获取的几种方法

    在 SPRING MVC 中,可以使用 @ModelAttribute 注解获取 POST 请求的 FORM 表单数据。例如: ```java pojo public class Pojo{ private String a; private int b; } @RequestMapping(method = RequestMethod.POST)...

    spring mvc RequestParam与 ModelAttribute异同.docx

    - 当使用 `@ModelAttribute` 时,Spring MVC会尝试根据参数名在请求中查找相应的参数,并将这些参数的值映射到对象的相应属性上。如果请求参数与对象属性不完全匹配,未找到的属性将保持其初始值(通常是Java Bean...

    简化版@requestmapping注解注册源码

    4. **模型数据**:`@ModelAttribute`注解可以用来将请求参数绑定到对象属性,或者将对象添加到模型中供视图使用。 现在我们来看看如何实现一个简化的`@RequestMapping`注解。首先,你需要创建一个新的注解,比如`@...

    springmvc注解详解

    @Controller 注解的主要作用是注册所写的 Controller 类,添加了@Controller 注解的类就可以担任控制器(Action)的职责,不使用注解,定义 SpringMVC 的控制类,则要继承 Spring 的 Controller 接口,如:...

Global site tag (gtag.js) - Google Analytics