SpringMVC 学习笔记(四) 处理模型数据
Spring MVC 提供了下面几种途径输出模型数据:
– ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体就可以通过该对象加入模型数据
– Map及Model:入參为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map中的数据会自己主动加入到模型中。
– @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间能够共享这个属性
– @ModelAttribute: 方法入參标注该注解后, 入參的对象就会放到数据模型中
1.1. ModelAndView
控制器处理方法的返回值假设为 ModelAndView, 则其既包括视图信息,也包括模型数据信息。
• 加入模型数据:
– ModelAndView addObject(String attributeName, Object attributeValue)
– ModelAndView addAllObject(Map<String, ?
> modelMap)
• 设置视图:
– void setView(View view)
– void setViewName(String viewName)
JAVA:
/**
* SpringMVC 使用 ModelAndView 来解析视图和数据
* 假设返回的是字符串 运行方法后 还是会包装成一个 ModelAndView
* 最后会遍历 ModelMap将键值对存入request中
* @return
*/
@RequestMapping("/modelAndView")
public ModelAndView modelAndView(){
ModelAndView mv = new ModelAndView();
mv.addObject("name", "bigsea");
mv.addObject("age", 23);
mv.setViewName("helloworld");
return mv;
}
JSP:
<a href="modelAndView">modelAndView</a>
<br>
name : ${name} <br>
age : ${age} <br>
<br>
结果:
ModelAndView 主要有 view 和 model 属性
ModelMap 关系图
最后解析的时候会遍历 map 然后将键值对 存入 request 中
1.2. Map 和Model
Spring MVC 在内部使用了一个org.springframework.ui.Model 接口存储模型数据
• 详细步骤
– Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
– 假设方法的入參为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传
递给这些入參。在方法体内,开发人员能够通过这个入參对象訪问到模型中的全部数
据。也能够向模型中加入新的属性数据
JAVA:
/**
* 当參数为Map时
* SpirngMVC 会传入 一个BindingAwareModelMap
* 往BindingAwareModelMap里面存入的值 会在后面存入request域中
* @param map
* @return
*/
@RequestMapping("/map")
public String map (Map<String, Object> map){
System.out.println(map.getClass().getName());
map.put("name", "bigsea");
map.put("age", 23);
return "helloworld";
}
JSP:
<a href="map">map</a>
name : ${name} <br>
age : ${age} <br>
<br>
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
将获取的结果存入開始new出来的ModelAndView 中,最后解析视图的时候,遍历插入request中,我们能够查看输出的map类型
org.springframework.validation.support.<span style="color:#ff0000;">BindingAwareModelMap</span>
1.3. @SessionAttributes
若希望在多个请求之间共用某个模型属性数据,则能够在控制器类上标注一个 @SessionAttributes,SpringMVC将在模型中相应的属性暂存到 HttpSession 中。
• @SessionAttributes 除了能够通过属性名指定须要放到会话中的属性外。还能够通过模型属性的对象类型指定哪些模型属性须要放到会话中
– @SessionAttributes(types=User.class) 会将隐含模型中全部类型为 User.class 的属性加入到会话中。
– @SessionAttributes(value={“user”,”admin”})
– @SessionAttributes(types={User.class, Department.class})
– @SessionAttributes(value={“user”,”admin”}, types={User.class})
/**
* 通过 @SessionAttributes 注解 在@SessionAttributes 中 设置 type 和 value
* type: 通过类型 来推断是否 将 属性存入 会话中
* value : 通过 ModelAndView 中 ModelMap 的 key 来推断 key 是否和 value 相等 假设相等 存入
* @return
*/
@RequestMapping("/sessionAttributes")
public ModelAndView sessionAttributes(){
User user = new User();
user.setName("bigsea");
user.setAge(23);
ModelAndView mv = new ModelAndView();
mv.setViewName("success");
mv.addObject("user", user);
return mv;
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1.4. @ModelAttribute
在方法定义上使用 @ModelAttribute 注解:Spring MVC在调用目标处理方法前。会先逐个调用在方法级上标注了@ModelAttribute 的方法。
• 在方法的入參前使用 @ModelAttribute 注解:
– 能够从隐含对象中获取隐含的模型数据中获取对象,再将请求參数绑定到对象中,再传入入參
– 将方法入參对象加入到模型中
/**
* 当标注了@ModelAttribute
* SpirngMVC就会在调用目标方法前去运行该方法
* 将结果传入implicitMode中
* SpringMVC 中 大量的使用implicitMode
* @return
*/
@ModelAttribute("user")
public User modelAttribute(){
User user = new User();
user.setName("bigsea");
user.setAge(23);
return user;
}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
1.1. HttpSessionRequiredException 异常
假设在处理类定义处标注了@SessionAttributes(“xxx”),则尝试从会话中获取该属性,并将其赋给该入參。然后再用请求消息填充该入參对象。
假设在会话中找不到相应的属性。则抛出 HttpSessionRequiredException 异常
@RequestMapping("/testSessionAttributesError")
	public String testSessionAttributesError(User user){
		System.out.println(user);
		return "helloworld";
	}
	/**
	 * 当标注了@ModelAttribute
	 * SpirngMVC就会在调用目标方法前去运行该方法
	 * 将结果传入implicitMode中
	 * SpringMVC 中 大量的使用implicitMode
	 * @return
	 */
	@ModelAttribute("abc")
	public User modelAttribute(){
		User user = new User();
		user.setName("bigsea");
		user.setAge(23);
		return user;
	}
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
改为以下这样的方式:
	@RequestMapping("/testSessionAttributesError")
	public String testSessionAttributesError(@ModelAttribute("abc")User user){
		System.out.println(user);
		return "helloworld";
	}
SpringMVC 学习笔记(四) 处理模型数据的更多相关文章
- SpringMVC:学习笔记(4)——处理模型数据
		SpringMVC—处理模型数据 说明 SpringMVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添 ... 
- MYSQL初级学习笔记四:查询数据的操作DQL(SELECT基本形式)(26-35)
		知识点六:查询数据的操作DQL(SELECT基本形式)(26-35) CREATE DATABASE IF NOT EXISTS cms DEFAULT CHARACTER SET utf8; USE ... 
- SpringMVC学习笔记(四)
		一.Controller接受网页参数. 1.使用方法的形参来接受 //使用基本类型和字符串来接受 @RequestMapping(value="/param2.do") publi ... 
- SpringMVC学习笔记四:数据绑定
		转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6831344.html 参考:http://www.cnblogs.com/HD/p/4107674.html ... 
- SQL学习笔记四之MySQL数据操作
		阅读目录 一 介绍 二 插入数据INSERT 三 更新数据UPDATE 四 删除数据DELETE 五 查询数据SELECT 六 权限管理 一 介绍 MySQL数据操作: DML =========== ... 
- SpringMVC 学习笔记(四)
		41. 尚硅谷_佟刚_SpringMVC_返回JSON.avi SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些sprin ... 
- SpringMVC学习笔记四:SimpleMappingExceptionResolver异常处理
		SpringMVC的异常处理,SimpleMappingExceptionResolver只能简单的处理异常 当发生异常的时候,根据发生的异常类型跳转到指定的页面来显示异常信息 ExceptionCo ... 
- springmvc学习笔记(18)-json数据交互
		springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ... 
- 史上最全的SpringMVC学习笔记
		SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ... 
随机推荐
- Ubuntu16.04 on ThinkPad E455 不能识别耳机 的解决方法
			去年 (2016) 2月份在ThinkPad E455 上安装了Ubuntu 14.04 LTS (dual boot with Windows 10, upgraded to Ubuntu 16.0 ... 
- Python GUI 之 Treeview 学习
			例子1 from tkinter import *import tkinter.ttk as ttk win = Tk()win.title("Treeview 学习") col ... 
- 【二分+扫描线乱搞】B. Producing Snow
			注意二分写法... http://codeforces.com/problemset/problem/923/B #include<cstdio> #include<string.h ... 
- 如何快速下载maven依赖jar包
			找到settings.xml文件.在mirrors里面添加下面的代码: <mirror> <id>alimaven</id> <mirrorOf>cen ... 
- LA 3135 优先队列
			题目大意:有若干命令,它有两个属性Q_Num,Period(周期).按时间循序模拟前k个命令并输出他们的Q_Num,若同时发生输出Q_Num最小的值. #include<iostream> ... 
- Linux下学习王爽老师的汇编语言
			坐起来非常容易,找到这条路确实非常曲折,为了后来的同志们不再纠结,特记录如下: 这几天看汇编语言时,很多人都推荐王爽老师的<汇编语言>,老师的书的确写的很好,但是讲的是ms的汇编,但是总不 ... 
- Python入门--7--处理数据时学习到的东西
			一.数据导入(这里使用的是pands包) import pands as pd wenjian = pd.read_csv('路径') 二.数据变换 print wenjian.head() # ... 
- 在Fedora 22下安装配置RealVNC Server 5.2.3的经验总结
			RealVNC是目前功能最全.性能最好的VNC商业软件套件,很多时候为了确保性能和功能的统一,还是大量地在使用RealVNC.最近在Fedora 22工作站上安装RealVNC Server 5.2. ... 
- codeforces Gym 101572 I 有向图最小环路径
			题目链接 http://codeforces.com/gym/101572 题意 一共n个文件 存在依赖关系 根据给出的依赖关系 判断是否存在循环依赖 ,不存在的话输出SHIP IT,存在的话 ... 
- Debian9初始配置
			1 进入root用户 su root 2 修改镜像源:编辑/etc/apt/sources.list文件 nano /etc/apt/sources.list 修改内容如下: deb http://m ... 
