深入理解Spring MVC开发-数据模型
上述章节只是谈到了参数的获取和转换,通过这些处理器终于可以调用控制器了。在Spring MVC中,控制器是业务逻辑的核心内容,而控制器的核心内容之一就是对数据的处理。通过上章对Spring MVC全流程的学习,可以看到允许控制器自定义模型和视图(ModelAndView),其中模型是存放数据的地方,视图则是展示给用户。本节暂时把视图放下,先来讨论数据模型的问题。
数据模型的作用是绑定数据,为后面的视图渲染做准备。首先对Spring MVC使用模型接口和类设计进行探讨,如下图
从途中可以看出ModelAndView中存在一个ModelMap类型的属性,ModelMap继承LinkedHashMap类,所以他具备Map接口的一切特性,除此之外它还可以增加数据属性。在Spring MVC的应用中,如果在控制器方法的参数中使用ModelAndView,Model或者ModelMap作为参数类型,Spring MVC会自动创建数据模型对象。代码如下:
package cn.hctech2006.boot.bootmvc.controller;
@Controller
@RequestMapping("/data")
public class DataModelController {
//注入角色服务类
@Autowired
private SysRoleService sysRoleService;
//测试Model接口
@GetMapping("/model")
public String sysRoleModel(Long id, Model model){
SysRole sysRole = sysRoleService.findById(id);
model.addAttribute("sysRole", sysRole);
//这里返回字符串,在Spring MVC中会自动创建ModelAndVIew且绑定名称。
return "data/role";
}
//测试modelMap
@GetMapping("/modelMap")
public ModelAndView sysRoleModelMap(Long id, ModelMap modelMap){
SysRole sysRole = sysRoleService.findById(id);
ModelAndView mv = new ModelAndView();
mv.setViewName("data/role");
//设置数据模型,此处的modelMap并没有与mv绑定,这部系统会自动处理
modelMap.put("sysRole", sysRole);
return mv;
}
//测试ModelAndView
@GetMapping("/mav")
public ModelAndView sysRoleModelAndView(Long id, ModelAndView mv){
SysRole sysRole = sysRoleService.findById(id);
//设置视图名称
mv.setViewName("data/role");
//设置数据模型
mv.addObject("sysRole", sysRole);
return mv;
}
}
从这段代码中可以看出Spring MVC还是比较智能的,例如在sysRoleModel方法中,只是返回一个字符串,Spring MVC会自动生成对应的视图,并且绑定数据模型。又如,sysRoleModelMap方法,返回了ModelAndView对象,但是他没有绑定ModelMap对象,Spring MVC也会自动绑定他。
上述数据对象,无论使用哪一个都是允许的。只是他们都是渲染同一个视图,而且该视图逻辑名称为data/role,这样通过InternalResourceViewResolver的定位,就会找到对应的视图,然后把数据渲染到这个视图上。data.html代码如下
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8" http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>角色信息</title>
<script src="https://code.jquery.com/jquery-3.2.0.js"></script>
</head>
<body>
<table>
<tr>
<td>角色名</td>
<td th:text="${sysRole.name}"></td>
</tr>
</table>
</body>
</html>
这样就可以测试这些内容了
地址http://localhost:8243/data/model?id=12
上一篇: SpringMVC 学习笔记二
下一篇: SpringMVC学习笔记(四)