数据之桥:深入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 中即可,不需要手动拼接参数。


相关文章
|
19天前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
57 2
|
2月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
38 9
|
2月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
2月前
|
JSON 前端开发 Java
【Spring】“请求“ 之传递 JSON 数据
【Spring】“请求“ 之传递 JSON 数据
89 2
|
2月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
60 2
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
169 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
前端开发 Java 数据库
springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)
本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。
|
4月前
|
Java Spring 开发者
掌握Spring事务管理,打造无缝数据交互——实用技巧大公开!
【8月更文挑战第31天】在企业应用开发中,确保数据一致性和完整性至关重要。Spring框架提供了强大的事务管理机制,包括`@Transactional`注解和编程式事务管理,简化了事务处理。本文深入探讨Spring事务管理的基础知识与高级技巧,涵盖隔离级别、传播行为、超时时间等设置,并介绍如何使用`TransactionTemplate`和`PlatformTransactionManager`进行编程式事务管理。通过合理设计事务范围和选择合适的隔离级别,可以显著提高应用的稳定性和性能。掌握这些技巧,有助于开发者更好地应对复杂业务需求,提升应用质量和可靠性。
51 0