数据之桥:深入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天前
|
设计模式 存储 前端开发
MVC(模型-视图-控制器)是一种在Web应用程序开发中广泛使用的软件设计模式
【5月更文挑战第12天】MVC模式是Web应用开发中的常见设计模式,将逻辑、数据和界面分离,提升代码可维护性和重用性。模型处理数据逻辑,视图展示数据,控制器协调用户输入与模型视图交互。优点包括代码分离、易维护、可扩展和组件重用,促进高效灵活的开发。
8 2
|
1天前
|
设计模式 前端开发 Java
初识Spring MVC
初识Spring MVC
13 0
|
1天前
|
前端开发 Java 应用服务中间件
Spring MVC框架概述
Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
16 1
|
1天前
|
监控 前端开发 Java
SpringBoot与SpringMVC有哪些区别?
SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。
23 2
|
1天前
|
JSON JavaScript Java
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
从前端Vue到后端Spring Boot:接收JSON数据的正确姿势
25 0
|
1天前
|
SQL Java 数据库连接
Springboot框架整合Spring JDBC操作数据
JDBC是Java数据库连接API,用于执行SQL并访问多种关系数据库。它包括一系列Java类和接口,用于建立数据库连接、创建数据库操作对象、定义SQL语句、执行操作并处理结果集。直接使用JDBC涉及七个步骤,包括加载驱动、建立连接、创建对象、定义SQL、执行操作、处理结果和关闭资源。Spring Boot的`spring-boot-starter-jdbc`简化了这些步骤,提供了一个在Spring生态中更便捷使用JDBC的封装。集成Spring JDBC需要添加相关依赖,配置数据库连接信息,并通过JdbcTemplate进行数据库操作,如插入、更新、删除和查询。
|
1天前
|
SQL Java 数据库连接
Springboot框架整合Spring Data JPA操作数据
Spring Data JPA是Spring基于ORM和JPA规范封装的框架,简化了数据库操作,提供增删改查等接口,并可通过方法名自动生成查询。集成到Spring Boot需添加相关依赖并配置数据库连接和JPA设置。基础用法包括定义实体类和Repository接口,通过Repository接口可直接进行数据操作。此外,JPA支持关键字查询,如通过`findByAuthor`自动转换为SQL的`WHERE author=?`查询。
|
1天前
|
数据采集 前端开发 Java
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
23 3
|
1天前
|
存储 前端开发 Java
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
14 1
|
1天前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
47 0
http://www.vxiaotou.com