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 ...
随机推荐
- 【Luogu】P2827蚯蚓(堆转队列)
按照国际惯例先发题目链接 woc从4月就开始做这sb题.最开始30分升到65分不管了,直到最近几天升到85分,再到今天AC.激动的心情自然是那些一遍就A或者一小时以内就A的神犇难以想象的. 下面说说 ...
- SPOJ GSS3 Can you answer these queries III ——线段树
[题目分析] GSS1的基础上增加修改操作. 同理线段树即可,多写一个函数就好了. [代码] #include <cstdio> #include <cstring> #inc ...
- [NOI2001] 食物链 (扩展域并查集)
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...
- P1140 相似基因 (动态规划)
题目背景 大家都知道,基因可以看作一个碱基对序列.它包含了4种核苷酸,简记作A,C,G,T.生物学家正致力于寻找人类基因的功能,以利用于诊断疾病和发明药物. 在一个人类基因工作组的任务中,生物学家研究 ...
- POJ2752 NEXT[J]特性应用利用。
题意:求一个字符串所有的前缀和后缀相同的情况,每个情况输出长度,如 ababcababababcabab :2 4 9 18 思路:next数组应用,利用j=nxet[i],i之前与开头相同的字符串长 ...
- Oracle的memory_max_target和memory_target修改和ORA-00845: MEMORY_TARGET not supported on this system错误解决
https://blog.csdn.net/sunny05296/article/details/56495599
- What should do in Production
Using Compose in production https://docs.docker.com/compose/production/
- 关于MySQL存储过程异常处理的一点心得
DROP PROCEDURE IF EXISTS `SP_MODEL`; DELIMITER ;;CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)BEGIN /** ...
- MongoDB学习day10--Mongoose的populate实现关联查询
一.Mongoose populate官方文档 https://mongoosejs.com/docs/populate.html 二.Mongoose populate关联查询 1.定义ref va ...
- 使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
通过Myeclipse + SVN插件 + TaoCOde可以省去代码仓库的租建:同时还可以很好的满足小团队之间敏捷开发的需求.接下来详细介绍整个搭建流程. 首先,介绍所用到的工具: 1,Myecli ...