关键词:
spring学习之@ModelAttribute运用详解
@ModelAttribute使用详解
[email protected]注释方法
例子(1),(2),(3)类似,被@ModelAttribute注释的方法会在此controller每个方法执行前被执行,因此对于一个controller映射多个URL的用法来说,要谨慎使用。
(1)@ModelAttribute注释void返回值的方法
1 @Controller 2 public class HelloWorldController 3 @ModelAttribute 4 public void populateModel(@RequestParam String abc, Model model) 5 model.addAttribute("attributeName", abc); 6 7 8 @RequestMapping(value = "/helloWorld") 9 public String helloWorld() 10 return "helloWorld"; 11 12
这个例子,在获得请求/helloWorld 后,populateModel方法在helloWorld方法之前先被调用,它把请求参数(/helloWorld?abc=text)加入到一个名为attributeName的model属性中,在它执行后 helloWorld被调用,返回视图名helloWorld和model已由@ModelAttribute方法生产好了。
这个例子中model属性名称和model属性对象有model.addAttribute()实现,不过前提是要在方法中加入一个Model类型的参数。
当URL或者post中不包含次参数时,会报错,其实不需要这个方法,完全可以把请求的方法写成,这样缺少此参数也不会出错
1 @RequestMapping(value = "/helloWorld") 2 public String helloWorld(String abc) 3 return "helloWorld"; 4
(2)@ModelAttribute注释返回具体类的方法
1 @ModelAttribute 2 public Account addAccount(@RequestParam String number) 3 return accountManager.findAccount(number); 4
这种情况,model属性的名称没有指定,它由返回类型隐含表示,如这个方法返回Account类型,那么这个model属性的名称是account。
这个例子中model属性名称有返回对象类型隐含表示,model属性对象就是方法的返回值。它无须要特定的参数。
(3)@ModelAttribute(value="")注释返回具体类的方法
1 @Controller 2 public class HelloWorldController 3 @ModelAttribute("attributeName") 4 public String addAccount(@RequestParam String abc) 5 return abc; 6 7 8 @RequestMapping(value = "/helloWorld") 9 public String helloWorld() 10 return "helloWorld"; 11 12
这个例子中使用@ModelAttribute注释的value属性,来指定model属性的名称。model属性对象就是方法的返回值。它无须要特定的参数。
(4)@ModelAttribute和@RequestMapping同时注释一个方法
1 @Controller 2 public class HelloWorldController 3 @RequestMapping(value = "/helloWorld.do") 4 @ModelAttribute("attributeName") 5 public String helloWorld() 6 return "hi"; 7 8
这时这个方法的返回值并不是表示一个视图名称,而是model属性的值,视图名称由RequestToViewNameTranslator根据请求"/helloWorld.do"转换为逻辑视图helloWorld。
Model属性名称有@ModelAttribute(value=””)指定,相当于在request中封装了key=attributeName,value=hi。
[email protected]注释一个方法的参数
(1)从model中获取
1 @Controller 2 public class HelloWorldController 3 @ModelAttribute("user") 4 public User addAccount() 5 return new User("jz","123"); 6 7 8 @RequestMapping(value = "/helloWorld") 9 public String helloWorld(@ModelAttribute("user") User user) 10 user.setUserName("jizhou"); 11 return "helloWorld"; 12 13
在这个例子里,@ModelAttribute("user") User user注释方法参数,参数user的值来源于addAccount()方法中的model属性。
此时如果方法体没有标注@SessionAttributes("user"),那么scope为request,如果标注了,那么scope为session
(2)从Form表单或URL参数中获取(实际上,不做此注释也能拿到user对象)
@ModelAttribute具有如下三个作用:
①绑定请求参数到命令对象:放在功能处理方法的入参上时,用于将多个请求参数绑定到一个命令对象,从而简化绑定流程,而且自动暴露为模型数据用于视图页面展示时使用。
其实 @ModelAttribute 此处对于供视图页面展示来说与 model.addAttribute("attributeName", abc); 功能类似。
1 @Controller 2 public class HelloWorldController 3 @RequestMapping(value = "/helloWorld") 4 public String helloWorld(@ModelAttribute User user) 5 return "helloWorld"; 6 7
此处多了一个注解@ModelAttribute("user"),它的作用是将该绑定的命令对象以“user”为名称添加到模型对象中供视图页面展示使用。我们此时可以在视图页面使用$user.username来获取绑定的命令对象的属性。
②暴露@RequestMapping 方法返回值为模型数据:放在功能处理方法的返回值上时,是暴露功能处理方法的返回值为模型数据,用于视图页面展示时使用。
public @ModelAttribute("user2") UserModel test3(@ModelAttribute("user2") UserModel user)
大家可以看到返回值类型是命令对象类型,而且通过 @ModelAttribute("user2") 注解,此时会暴露返回值到模型数据( 名字为user2 ) 中供视图展示使用
@ModelAttribute 注解的返回值会覆盖 @RequestMapping 注解方法中的 @ModelAttribute 注解的同名命令对象
③暴露表单引用对象为模型数据:放在处理器的一般方法(非功能处理方法)上时,是为表单准备要展示的表单引用对象,如注册时需要选择的所在城市等,而且在执行功能处理方法( @RequestMapping 注解的方法)之前,自动添加到模型对象中,用于视图页面展示时使用;
注意这时候这个User类一定要有没有参数的构造函数。
@modelattribute用法(代码片段)
@ModelAttribute用法详解1用在方法上方式一packagecom.sz.controller;importorg.springframework.stereotype.Controller;importorg.springframework.ui.Model;importorg.springframework.web.bind.annotation.ModelAttribute;imp 查看详情
ssm,springboot相关知识盲区整理(代码片段)
SSM,SpringBoot相关知识盲区整理@ResponseBody详解ResponseEntity详解@ModelAttribute运用详解@RequestParam无法获取参数@RequestParam和@RequestBody的区别Spring常用注解(绝对经典)Spring中的Environment@ 查看详情
iptables的运用,详解!(代码片段)
iptables简介netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功... 查看详情
对session运用的实战与原理剖析详解(代码片段)
@[toc]一.Session基础1.1什么是Session?Session是基于Web服务器的状态保持的一种方法。服务器将为每个用户(浏览器)创建一个Session对象。一个Session独占浏览器。只要浏览器未关闭(Tomcat未打开或JSSessionID未清除)(关闭网页不影响)... 查看详情
@modelattribute的使用(代码片段)
@ModelAttribute注解可被应用在方法或方法参数上。对方法使用@ModelAttribute注解:注解在方法上的@ModelAttribute说明了方法的作用是用于添加一个或多个属性到model上。这样的方法能接受与@RequestMapping注解相同的参数类型,只不过不能... 查看详情
@modelattribute注解详细使用(代码片段)
org.springframework.web.bind.annotation.ModelAttribute注解类型将请求参数绑定到Model对象。@ModelAttribute注解只支持一个属性value,类型为String,表示绑定的属性名称。提示:被@ModelAttribute注释的方法会在Controller每个方法执行前被执行,因此... 查看详情
javaweb实战之response重定向运用以及原理详解(代码片段)
@[toc]一.实现重定向重定向是一个非常广泛的概念,即通过各种方法将各种网络请求重定向到其他位置,如网页重定向、域名重定向、数据包重定向等。如上图,A为客户端,A向服务端B请求一个资源,B返回告诉A去访问C,然后A去... 查看详情
@modelattribute的用法,与@requestbody的区别(代码片段)
@ModelAttribute的用法大概有两种:一种是直接标记在方法上,一种是标记在方法的参数中,两种标记的方法产生效果也各不相同一.直接标记在方法上1@Controller2@RequestMapping(value="model")3publicclassModelAttributeTest45@ModelAttribute6publicvoidinit()... 查看详情
leetcode打卡--moore投票法的运用详解(代码片段)
文章目录题目摩尔投票概述解题过程解题代码哈希表法摩尔投票法题目摩尔投票概述摩尔投票需要经过以下两个阶段:抵消阶段计数阶段抵消阶段:两个不同投票进行对坑,并且同时抵消掉各一张票,如果两个投... 查看详情
@requestparam@requestbody和@modelattribute区别(代码片段)
一、@RequestParamGET和POST请求传的参数会自动转换赋值到@RequestParam所注解的变量上1.@RequestParam(org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参。例:(1)get请求:url请求:http://localhost:8080/WxProgr... 查看详情
小白也能看懂的dfs算法本质详解(代码片段)
...常见的算法模型我们通过借助函数递归和递归停止条件的运用实现对数据的高级枚举对于DFS算法而言,最重要的是如何去枚举数据,即如何去搜索?这是在运用DFS之前我们就应该思考的问题,只有对其思考清楚,才不妨碍我们下... 查看详情
@modelattribute注解与spring的表单标签库form(代码片段)
介绍:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行1.@ModelAttribute /** *根据id查询数据 *可以添加Model属性,进行参数返回, *model属性如果没有指定,它由返回类型隐含表示,如这个方法返回FfNewRedbagManage... 查看详情
java如果在action阶段执行验证,则在render阶段将@modelattribute作为参数清除验证错误,(代码片段)
devops详解(代码片段)
...多人越来越坚定地在DevOps与chef、puppet或Docker容器的熟练运用方面划了等号。对此我有不同看法。DevOps的范畴远远超过puppet或Docker等工具。这样的看法甚至让我感觉有些气愤。DevOps在我看来极为重要,过去15年来,我一直在大型机... 查看详情
@requestparam@requestbody和@modelattribute区别(代码片段)
一、@RequestParamGET和POST请求传的参数会自动转换赋值到@RequestParam所注解的变量上1.@RequestParam(org.springframework.web.bind.annotation.RequestParam)用于将指定的请求参数赋值给方法中的形参。例:(1)get请求:url请求:http://localhost:8080/WxProgr... 查看详情
小白也能看懂的dfs算法本质详解(代码片段)
...常见的算法模型我们通过借助函数递归和递归停止条件的运用实现对数据的高级枚举对于DFS算法而言,最重要的是如何去枚举数据,即如何去搜索?这是在运用DFS之前我们就应该思考的问题,只有对其思考清楚,才不妨碍我们下... 查看详情
小白也能看懂的dfs算法本质详解(代码片段)
...常见的算法模型我们通过借助函数递归和递归停止条件的运用实现对数据的高级枚举对于DFS算法而言,最重要的是如何去枚举数据,即如何去搜索?这是在运用DFS之前我们就应该思考的问题,只有对其思考清楚,才不妨碍我们下... 查看详情
面试高频题目--移动汉诺塔--递归与分治的运用(代码片段)
文章目录题目汉诺塔详解最终代码题目oj平台汉诺塔详解要处理汉诺塔,首先要弄清楚汉诺塔的本质:它实际上是三根柱子,需要把所有的层叠移动到另一根柱子上,问题来了,有三根A,B,C柱子,... 查看详情