数据之桥:深入Spring MVC中传递数据给视图的实用指南

简介: 数据之桥:深入Spring MVC中传递数据给视图的实用指南

在 SpringMVC 中,控制器方法的参数可以使用 ModelModelMap 和普通的 Map 来传递数据给视图。

Model

Model 是一个接口,用于封装控制器方法的模型数据。它允许控制器方法将数据添加到模型中,并在视图中进行访问。

用法:

  • 使用 addAttribute(String name, Object value) 方法将属性添加到模型中。
  • 在视图中通过 ${name} 表达式访问模型中的属性。
  • 注意点:
  • Model 接口是 SpringMVC 特定的,与 Web 技术无关。
  • 是一个接口,需要使用具体的实现类(如 ModelAndView )进行操作。

示例:

@RequestMapping("/example")
public String exampleMethod(Model model) {
    model.addAttribute("message", "Hello, World!");
    return "exampleView";
}

ModelMap:

ModelMapModel 接口的实现类,提供了更多的便捷方法。

用法:

  • 可以使用 addAttribute(String name, Object value) 方法将属性添加到模型中。
  • 在视图中通过 ${name} 表达式访问模型中的属性。
  • 注意点:
  • ModelMap 实现了 Map 接口,因此具备了 Map 的特性。

示例:

@RequestMapping("/example")
public String exampleMethod(ModelMap model) {
    model.addAttribute("message", "Hello, World!");
    return "exampleView";
}

普通的 Map:

普通的 Map 是一种常规的 Java 集合,用于封装模型数据。

用法:

  • 使用 put(String key, Object value) 方法将属性添加到 Map 中。
  • 在视图中通过 ${key} 表达式访问 Map 中的属性。
  • 注意点:
  • 可以使用任何类型的 Map 来传递数据,但推荐使用 ModelModelMap,因为它们是 SpringMVC 框架提供的专门用于封装模型数据的类。

示例:

@RequestMapping("/example")
public String exampleMethod(Map<String, Object> model) {
    model.put("message", "Hello, World!");
    return "exampleView";
}

注意

1. 通过 Model、ModelMap 进行作用域的处理,就可以解决视图模板技术耦合的问题。
2. SpringMVC 中提供 Model 和 ModelMap 这两种方式处理 requst 作用域,他们的区别是什么?

表现形式上虽然是通过两种开发方式,声明的形参类型不同,一个是 Model,另一个是 ModelMap。但是在运行时,SpringMVC 会动态的提供对应的实现类型,名字是BindingAwareModelMap。所以本质上两者是相同的。

3. 那为什么不直接使用 BindingAwareModelMap?

在源码中 SpringMVC 不建议使用 BindingAwareModelMap。其原因是因为如果直接使用 BindingAwareModelMap 的话,会存在耦合。MVC 开发时使用 BindingAwareModelMap,而 WebFlux 开发时使用的是 ConcurrentModel。如果替换 Web 的实现方案,直接使用 BindingAwareModelMap 话,不利于项目的维护,得修改代码。所以更加建议使用 Model 接口处理。

4. SpringMVC 为什么会提供二种开发方式?Model、ModelMap 这两种开发方式那种方式更加推荐使用?

不推荐使用 ModelMap,他是 SpringMVC 2.0 引入的类型。当时的设计只是针对于 MVC 的场景使用,替换作用域。而后续 Spring 又支持了 WebFlux 的开发方式。显然使用 ModelMap 就无法使用了。所以 SpringMVC 在 2.5.1 引入了全新设计的接口 Model,他既可以兼容传统 MVC 也可以在 WebFlux 中使用。更加有利于项目维护。鉴于此更加推荐使用 Model 的方式。而 SpringMVC 为了兼容性,所以两者目前都可以使用。

5. 如果 redirect 跳转,数据该如何传递?

SpringMVC 会自动的把 Model 或者 ModelMap 中的数据,通过 ? 的形式在 url 上进行拼接,从而传递数据。我们在使用 redirect 跳转前只需要将要传递的数据放在 Model 或者 ModelMap 中即可,不需要手动拼接参数。


相关文章
|
1天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
8 0
|
3天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
3天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
7天前
|
前端开发 Java 应用服务中间件
Spring MVC常见面试题
Spring MVC常见面试题
6 0
|
21天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
21天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
45 0
|
8天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
18 0
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
118 0