博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springMVC笔记系列(13)——模型数据处理篇 之 ModelAndVIew对象
阅读量:5956 次
发布时间:2019-06-19

本文共 2497 字,大约阅读时间需要 8 分钟。

hot3.png

之前的几篇文章介绍了处理请求的各个注解以及POJO对象接收和Servlet原生API参数类型支持等内容,这些内容主要解决的都是如何接收和映射请求数据。

接下来我们重点来看看如何处理和返回模型数据。之前我们控制器类的处理方法返回的都是String,来生成我们最终的物理url路径。可输出的模型数据还可以有多种类型。

Spring MVC 提供了以下几种途径输出模型数据:

ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据

Map 及 Model: 入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map

中的数据会自动添加到模型中。

@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性

@ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中

从本篇开始,我们进入一个小环节,就是模型数据处理篇,本篇先介绍其中的ModelAndView。

ModelAndView

我们编写控制器类的一个方法如下,方法中我们构造了一个ModelAndView对象,并将最终的物理url的相应的返回段作为构造参数(其实就是原先return的字符串,现在作为ModelAndView的构造方法的参数)。SpringMVC会和以前一样处理请求并转向目标url。那么,我们为什么还要用ModelAndView对象呢?这是因为,我们可以将某些模型数据添加到ModelAndView对象中,SpringMVC会把ModelAndView中的model数据放入request域对象中。

源码解析结论:实际上,无论处理方法返回的是String、ModelAndView还是上面的任何类型,springMVC内部都会统一转换为一个ModelAndView。

控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。

• 添加模型数据:

– MoelAndView addObject(String attributeName, Object attributeValue)

– ModelAndView addAllObject(Map<String, ?> modelMap)

• 设置视图:

– void setView(View view)

– void setViewName(String viewName)

好,现在我们看个例子,控制器类的处理方法如下:我们添加了类似于key,value形式的数据,我们稍后会在目标页面用EL表达式进行显示。这里,我们value既有String的例子,也有对象的例子。

package com.happyBKs.springmvc.handlers;import java.util.Date;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.happyBKs.springmvc.beans.Location;@RequestMapping("/model")@Controllerpublic class ModelDataHandler {		/*	 * 目标方法返回值可以使ModelAndView类型	 * 可以包含视图和模型信息	 * SpringMVC会把ModelAndView中的model数据放入request域对象中。	 * 	 * 这里需要注意的是,其实处理函数无论返回String,ModelAndView,Map类型,SpringMVC内部都会自动统一转换为ModelAndView	 *	 */	@RequestMapping("/ModelAndView")	public ModelAndView handle1()	{		String reStr="ModelAndViewTest";		ModelAndView mv=new ModelAndView(reStr);		mv.addObject("time", new Date());		Location loc=new Location();		loc.setCity("urban");		loc.setProvince("Shanghai");		mv.addObject("local", loc);		return mv;	}}

目标页面:/views/ModelAndView.jsp  (model/ModelAndView)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><%@ page isELIgnored="false"%>  
Insert title heretime: ${ requestScope.time }
location: ${ requestScope.local.city },${ requestScope.local.province }

注意:JSP页面EL表达式记得要写上命令<%@ page isELIgnored="false"%>,否则就搞笑了,小白可以试一下。

220200_MtBZ_1156339.jpg

后面的文章,我会对另外几种模型数据输出作介绍。

转载于:https://my.oschina.net/happyBKs/blog/420310

你可能感兴趣的文章
求CRC校验和的低位和高位的两种方式
查看>>
spark-sql访问hive的问题记录
查看>>
Oracle Cursor的使用
查看>>
SQL Server 2008 (R2) 单机版安装的先决条件
查看>>
js setTimeout 与 setInterval 以及 for 循环 刷新UI
查看>>
Samsung_tiny4412(驱动笔记07)----spinlock,semaphore,atomic,mutex,completion,interrupt
查看>>
substring 在C#,Javascript,SQL 中index开始值
查看>>
抽象工厂模式
查看>>
Android SDK镜像的介绍使用【转发】
查看>>
apt-get方式安装lnmp环境
查看>>
ubuntu 安装 qt等软件
查看>>
js模态窗口
查看>>
LayoutInflater的infalte()
查看>>
TCP粘包, UDP丢包, nagle算法
查看>>
POJ 3280 Cheapest Palindrome (DP)
查看>>
投递外刊引用自己的文章该注意什么
查看>>
文本 To 音频
查看>>
UVA 644 Immediate Decodability (字符处理)
查看>>
项目总结—jQuery EasyUI- DataGrid使用
查看>>
使用智能移动设备访问Ossim制
查看>>