0%

3.2.4 Model和ModelMap

3.2.4 Model和ModelMap

在请求处理方法中可出现和返回的参数类型中,最重要的就是ModelModelAndView了。对于MVC框架,控制器(Controller)执行业务逻辑,用于产生模型数据(Model),而视图(view)则用于渲染模型数据。
如何将模型数据传递给视图是Spring MVC框架的一项重要工作, Spring MVC提供了多种途径输出模型数据,如:

  • ModelModelMap
  • ModelAndView
  • @ModelAttribute
  • @SessionAttributes

下面将重点介绍ModelModelMap以及ModelAndView,@SessionAttributes将在3.11节中重点介绍;@ModeLAttribute将在3.12节中重点介绍.

Spring MVC在内部使用了一个org.springframework.ui.Model接口存储模型数据,它的功能类似java.util.Map接口,但是比Map易于使用。org.springframework.ui.ModelMap接口实现了Map接口。
Spring MVC在调用处理方法之前会创建一个隐含的模型对象,作为模型数据的存储容器。如果处理方法的参数为ModelModelMap类型,则Spring MVC会将隐含模型的引用传递给这些参数。在处理方法内部,开发者可以通过这个参数对象访问模型中的所有数据也可以向模型中添加新的属性数据。
在处理方法中, ModelModelMap对象都可以使用如下方法添加模型数据
addAttribute(String attributeName,Object attributeValue)

示例 Model和ModelMap的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package org.fkit.controller;

import org.fkit.domain.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

// Controller注解用于指示该类是一个控制器,可以同时处理多个请求动作
@Controller
public class ModelController
{

/*
* SpringMVC在调用处理方法之前会创建一个隐含的模型对象, 作为模型数据的存储容器。 如果处理方法的参数为Model或ModelMap类型,
* 则SpringMVC会将隐含模型的引用传递给这些参数。
*/
@RequestMapping(value = "/modelTest")
public String modelTest(Model model)
{
System.out.println("modelTest");
User user = new User();
// 设置user对象的username属性
user.setUsername("添加到modeMap中的数据");
// 在处理方法内部,开发者可以通过这个参数对象访问模型中的所有数据,
// 也可以向模型中添加新的属性数据。
// 将User对象添加到Model当中,也就是添加到JSP的请求域中
model.addAttribute("user", user);
// 返回视图路径
return "result1";
}

@RequestMapping(value = "/ModelMapTest")
public String modelMapTest(ModelMap modelMap)
{
System.out.println("ModelMapTest");
User user = new User();
// 设置user对象的username属性
user.setUsername("添加到modeMap中的数据");
// 将User对象添加到ModelMap当中
modelMap.addAttribute("user", user);
return "result2";
}

}

modelTest方法中创建了一个自定义的User对象,并且给username属性赋值。使用Model对象的addAttribute("user",user)方法将User对象添加到Model当中,即JSPrequest Scope当中

modelMapTest方法的代码功能与此类似,只是存储对象由Model改成了ModelMap

原文链接: 3.2.4 Model和ModelMap