modelAndView传值给JSP

Spring MVC的ModelAndView将值存入request对象,JSP通过EL表达式取出展示。视图解析器ViewResolver负责从视图名称到实际视图的映射,支持多种视图和模型数据的呈现。ModelAndView可通过不同构造方法设置View和Model,实现数据传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       modelAndView本质上即使 把传入给它的值加入到request对象中,然后在相对应的jsp中使用EL表达式将值取出来展示或处理。

Spring mvc视图机制

所有的web应用的mvc框架都有它定位视图的方式。Spring提供了视图解析器供你在浏览器中显示模型数据,而不必被拘束在特定的视图技术上。

Spring的控制器Controller会返回一个ModelAndView的实例。Spring根据ModelAndView实例中的ViewModel把信息反馈给用户。Spring中的视图是以名字为标识的,ViewResolver是通过名字来解析view的。Spring提供了多种视图和视图解析器。

AModelAndView

org.springframework.web.servlet.ModelAndView

public class ModelAndView extends Object

ModelAndView如其名称所示,它代表了Spring Web MVC中呈现画面时所使用的ModelView,由于Java一次只能返回一个物件,所以ModelAndView的作用封装这两个物件,以方便您一次返回ModelView这两个物件。

构造方法

ModelAndView(String viewName)

Convenient constructor when there is no model data to expose.

最简单的ModelAndView是只有View的名称,之后View名称被View resolver,也就是org.springframework.web.servlet.View的实例解析,例如 InternalResourceViewJstlView等等。

ModelAndView(String viewName, Map model)

Creates new ModelAndView given a view name and a model.

如果您要返回呈现画面时所需的Model资料,则可以使用Map来收集呈现View时所需的资料,然后在建构ModelAndView作为建构时的参数。

ModelAndView(String viewName, String modelName, Object modelObject)

Convenient constructor to take a single model object.

返回单个model时使用。

BViewResolver(视图解析器)

org.springframework.web.servlet.ViewResolver

public interface ViewResolver

现在我们有了view名称,也有了显示时需要的model资料,那么我们如何显示view了。这就需要用到ViewResolver,它提供了从视图名称到实际视图的映射。

(例如我们得到的view名称为test,通过ViewResolver我们把它映射到/WEB-INF/jsp/test.jsp的资源上,当然也可以把test映射到test.pdf的资源上,这部分工作由ViewResolver来完成,但是具体如何显示test.jsptest.pdf,就需要View来实现了)。


### 使用 `ModelAndView` 返回 JSP 页面 在 Spring MVC 中,`ModelAndView` 是一种用于封装模型数据和视图名称的对象。当控制器处理请求并返回响应时,可以使用 `ModelAndView` 来指定要渲染的 JSP 页面以及递给该页面的数据。 #### 创建控制器方法 为了展示如何通过 `ModelAndView` 返回 JSP 页面,在控制器类中定义一个处理器方法: ```java import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class ExampleController { @RequestMapping("/examplePage") public ModelAndView showExamplePage() { String viewName = "exampleView"; // 对应于 WEB-INF/views/exampleView.jsp 文件路径 // 添加属性到模型中 ModelMap model = new ModelMap(); model.addAttribute("message", "This message comes from the controller"); return new ModelAndView(viewName, model); } } ``` 上述代码展示了创建一个新的 `ModelAndView` 实例的过程,并指定了逻辑视图名 `"exampleView"` 和一些附加到模型中的键对数据[^4]。 #### 配置视图解析器 为了让应用程序知道在哪里查找对应的物理文件(即 `.jsp`),需要配置视图解析器。通常是在 XML 或者基于 Java 的配置类里完成这项工作。这里给出的是基于 Java Config 的例子: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration public class AppConfig { @Bean public ViewResolver internalResourceViewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } } ``` 这段配置告诉应用服务器所有的视图都位于 `/WEB-INF/views/` 下面,并且以 `.jsp` 结尾。 #### 编写 JSP 页面 最后一步就是编写实际显示这些信息的 JSP 页面 (`exampleView.jsp`) ,它会接收来自控制器的信息并通过 HTML 渲染出来: ```html+jsp <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Example Page</title> </head> <body> <h1>${message}</h1> </body> </html> ``` 此模板利用 EL 表达式 `${}` 获取存储在模型里的变量并将其嵌入到文档结构内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值