内容简介:你一定知道Model类,在控制器中,数据会存放到Model对象中,当需要生成HTML的时候,模板引擎会根据名字来定位数据,向下图这样。从广义上来说,Model指的是MVC中的M,即Model(模型)。从狭义上讲,Model就是个key-value集合。实际上,上图home方法得到的model对象就是一个往Model里放数据还有另外一种方式,使用ModelAndView。正如它的名字一样,ModelAndView将Model和视图名绑定在一起,作为请求处理方法的返回值。
你一定知道Model类,在控制器中,数据会存放到Model对象中,当需要生成HTML的时候,模板引擎会根据名字来定位数据,向下图这样。
从广义上来说,Model指的是MVC中的M,即Model(模型)。从狭义上讲,Model就是个key-value集合。实际上,上图home方法得到的model对象就是一个 java.util.Map
,你可以将Model类型替换为 Map<String, Object>
,或者ModelMap——一个实现了Model接口的 java.util.HashMap
。
往Model里放数据还有另外一种方式,使用ModelAndView。正如它的名字一样,ModelAndView将Model和视图名绑定在一起,作为请求处理方法的返回值。
有的人会倾向于这种写法。因为请求处理方法(上图的home方法)的参数,通常是带有“输入(input)”的含义的,比如我们之前介绍的@RequestParam和@PathVariable,比如我们没有介绍过的@RequestHeader和@CookieValue,他们都是一个请求的“输入”,通常不会变。如果将Model类作为请求处理方法的参数,并且去改变他,可能有点不太“合适”。
写法怎么来确定,每个人不同,只要你的选择在项目里始终如一就行。对于我来说,我选择将Model作为请求处理方法的参数,不仅是因为这种写法更新一点,简便一点,更因为它可以获取更多信息。我们知道Model是伴随一个请求的整个过程的,在请求处理方法执行之前,Model有可能已经有数据了,把Model作为参数,就可以看到方法执行之前的数据了。接下来,我们看看,在方法执行之前如何给Model里添加数据。
@ModelAttribute的用法
在所有的请求处理方法执行之前,你有机会往Model里面加数据:新建一个方法,加上@ModelAttribute注解和Model参数,就可以像下图这种样加数据了。
注意,每个请求处理方法在执行之前,都会执行一次fillData方法。虽然fillData不是@RequestMapping方法,不能指定请求路径,但是可以添加很多请求处理方法的参数,比如@RequestParam,@RequestHeader等。比如你的HTTP请求里有一个Header是自定义的,那么你可以在fillData方法里,获取到Header的信息,再根据它获取一些数据比如用户信息什么的,放到Model里。
如果fillData里的数据很少,只有一个对象,你可以直接把这个对象返回,它会自动被加入到Model里,相当于隐性执行了Model的 addAttribute(Object)
方法。下图中你可以看到,虽然你没有指明在Model中User对象的名字,但是Model自动给它了一个名字“user”,因为你不提供名字(即key)的话,框架会根据类名生成一个,规则是类名首字母小写(User->user)。这个key如果你想改,就给fillData方法的@ModelAttribute注解添加一个参数。
@ModelAttribute还有一种用途是作为请求处理方法的参数,如果你需要Model中某个对象,可以给参数添加@ModelAttribute注解:
如果Model中没有User对象,那么框架会创建一个,并放到Model中,也就是说user变量肯定不为空。然后呢,GET请求或者POST请求的参数,会跟user对象的成员(fields)名称进行对应,对的上的话就赋值给成员。这个过程也叫做数据绑定(Data Binding),一个典型的应用就是处理表单。因为这种用法太常见了,所以@ModelAttribute也是可以省略的,请求处理方法的参数,如果不是 框架能识别的类型 ,都会假定它用了@ModelAttribute。
文本不打算对数据绑定这一块儿进行说明,因为东西还挺多的,之后介绍表单处理的时候我们再详细解读。
以上所述就是小编给大家介绍的《Spring Boot教程(9) – Model的用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Groovy 基本用法 -- Gradle教程(二)
- Groovy 基本用法 -- Gradle教程(二)
- 进一步学习 nox 教程,轻松掌握命令行用法
- [译] 进一步学习 nox 教程,轻松掌握命令行用法
- AWK 的用法
- AWK基础用法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Masterminds of Programming
Federico Biancuzzi、Chromatic / O'Reilly Media / 2009-03-27 / USD 39.99
Description Masterminds of Programming features exclusive interviews with the creators of several historic and highly influential programming languages. Think along with Adin D. Falkoff (APL), Jame......一起来看看 《Masterminds of Programming》 这本书的介绍吧!