@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
为了解决这个问题,我们可以使用`@ModelAttribute`注解配合一个方法,如例子所示: ```java @ModelAttribute public void getUsers(@RequestParam(value="name", required=false) String name, Map, Object> map){ ...
在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,主要用于数据绑定...在实际项目中,`@ModelAttribute`经常与其他注解如`@RequestParam`、`@PathVariable`等配合使用,实现灵活的数据处理和路由功能。
### ModelAttribute注解详解 在Spring MVC框架中,`@ModelAttribute`注解是一个非常重要的工具,它主要用于将请求参数绑定到Model对象上。这不仅提高了数据处理的灵活性,还简化了控制器方法的设计。 #### 一、`@...
在Spring MVC框架中,`@ModelAttribute`是一个非常重要的注解,它主要用于数据绑定,帮助开发者在控制器方法中接收和处理请求参数。这篇文章将深入探讨`@ModelAttribute`的应用及其背后的原理。 `@ModelAttribute`...
当`@ModelAttribute`注解在控制器方法的返回值上时,Spring MVC会将返回的对象添加到Model中,以便在视图层中使用。这样,我们可以在视图层通过EL表达式(Expression Language)访问这些对象的属性。 例如,假设...
本文将深入探讨在JSP中如何使用`@ModelAttribute`,以及它在实际开发中的应用。 首先,`@ModelAttribute`通常用在控制器(Controller)方法的参数上,它的主要作用是将HTTP请求中的数据与Java对象进行映射,从而...
下面我们将详细介绍@ModelAttribute注解的使用方法和示例代码。 一、@ModelAttribute注释方法 @ModelAttribute注解可以用于标记一个方法,该方法将在控制器的每个方法执行前被执行。例如: ```java @Controller ...
文章中提到的创新性使用方式是创建一个基础控制器类(BaseController),在其中利用`@ModelAttribute`注解来初始化`HttpServletRequest`、`ModelMap`和`HttpServletResponse`,这样在子控制器中就可以直接访问这些...
- 当使用`@ModelAttribute`注解进行数据绑定时,该注解的参数可以省略不写,默认情况下,Spring MVC会使用POJO类名的首字母小写形式作为模型属性名。 - 如果显式地为`@ModelAttribute`提供`value`属性值,则在前端...
当请求被处理时,Spring MVC会自动调用相应的验证规则,这些规则通常在实体类的属性上定义(如使用`@NotNull`, `@Size`, `@Pattern`等注解)。如果验证失败,Spring将不会执行方法,而是将错误信息存储起来供后续...
// 接下来处理@ModelAttribute注解的方法 for (ModelAttributeMethodProcessor methodProcessor : this.modelAttributeProcessors) { if (methodProcessor.supportsMethodArgumentType(methodArgument)) { ...
当我们在一个控制器方法的参数上使用`@ModelAttribute`时,Spring MVC会尝试从请求中获取与注解参数名相匹配的数据,例如表单提交的数据或URL路径变量。然后,这些数据会被用来初始化或者更新一个模型实体对象。例如...
在Spring MVC框架中,`@ModelAttribute`注解扮演着至关重要的角色,它是数据绑定和模型对象创建的关键。本文将深入探讨`@ModelAttribute`的工作原理及其常见应用场景。 首先,`@ModelAttribute`注解可以用于两个...
SpringBoot 提供了多种方式来使用 @ModelAttribute 注解,包括使用 @ModelAttribute 注解来绑定对象、使用 @ModelAttribute 注解来绑定 List 对象等。 11. SpringBoot+Maven 多模块项目的构建、运行、打包实战 ...
在 SPRING MVC 中,可以使用 @ModelAttribute 注解获取 POST 请求的 FORM 表单数据。例如: ```java pojo public class Pojo{ private String a; private int b; } @RequestMapping(method = RequestMethod.POST)...
- 当使用 `@ModelAttribute` 时,Spring MVC会尝试根据参数名在请求中查找相应的参数,并将这些参数的值映射到对象的相应属性上。如果请求参数与对象属性不完全匹配,未找到的属性将保持其初始值(通常是Java Bean...
4. **模型数据**:`@ModelAttribute`注解可以用来将请求参数绑定到对象属性,或者将对象添加到模型中供视图使用。 现在我们来看看如何实现一个简化的`@RequestMapping`注解。首先,你需要创建一个新的注解,比如`@...
@Controller 注解的主要作用是注册所写的 Controller 类,添加了@Controller 注解的类就可以担任控制器(Action)的职责,不使用注解,定义 SpringMVC 的控制类,则要继承 Spring 的 Controller 接口,如:...