深入理解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
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值