springMVC-4-处理模型数据
返回模型数据(Model)
index.jsp中
<h1>获取模型数据</h1>
<a href="/model/test1">ModelAndViews</a>
</html>
control中
- springMVC会把ModelAndView的model数据放入到requestScope(请求域)
@Controller
@RequestMapping("model")
public class Model {
@RequestMapping(value = "test1")
public ModelAndView test1(){
//创建模型
String viewName = new String("ModelAndViews");
ModelAndView modelAndView = new ModelAndView(viewName);
//给模型添加数据
modelAndView.addObject("message","wangwang");
//把模型返回
return modelAndView;
}
}
ModelAndViews.jsp
<body>
模型数据:${message}
</body>
//因为:会封装成一个map,所以还可以改成
<body>
模型数据:${requestScope.message}
</body>
返回模型数据(Map)
control
@RequestMapping(value = "test2")
public String test2(Map<String, Object> map){
map.put("username","wangwang");
return "ModelAndViews";
}
modelAndViews.jsp
<h1>返回map数据</h1>
map数据:${requestScope.username}
@SessionAttributes把数据放置到session域对象中
@SessionAttributes 除了可以通过属性名指定需要放到会 话中的属性外,还可以通过模型属性的对象类型指定哪些 模型属性需要放到会话中
比如:@SessionAttributes(value = {"user"},types = {String.class})表示键为user的数据会被放到session中去,String类型的数据也会被放到session中获取
- value属性:表名那个值会被放到session域对象中
- type属性:表明哪种类型的值会被放到session域对象中
这个注解只能放到类的上面
control
@RequestMapping(value = "test3")
public String test3(Map<String, Object> map){
User user = new User("wang","12344","qq.com");
map.put("user",user);
map.put("school","jainxi");
return "ModelAndViews";
}
modelAndViews.jsp
<h1>返回session域对象</h1>
request域对象:${requestScope.user}<br>
String类型request数据类型:${sessionScope.school}<br>
session域对象:${sessionScope.user}<br>
String类型session数据类型:${sessionScope.school}
@ModelAttribute填充更新数据
先拦截请求,然后通过请求id从数据库中填充User对象,然后再执行更新(覆盖请求)
index.jsp
<%--模拟修改操作,
1、原始数据:1,tom,123456,tom@qq.com,20
2、密码不能被修改
3、表单回显,模拟操作直接在表单填写对应的属性值--%>
<form action="/model/test4" method="post">
<input type="hidden" name="id" value="1">
username:<input type="text" name="username" value="Tom"><br>
email:<input type="text" name="email" value="tom@qq.com"><br>
<input type="submit" value="提交">
</form>
control
@RequestMapping(value = "test4")
public String test4(User user){
System.out.println(user);
return "ModelAndViews";
}
//比requestMapping先一步获取到请求(拦截器)
//1、获取到传入的id,并通过id在数据库中获取到User对象
//2、然后把这个User对象放到map中
//3、然后再转到RequestMapping中去,用后来得到的数据覆盖原有对象
@ModelAttribute(value = "test4")
public void getUser(@RequestParam(value="id",required = false) Integer id,Map<String, Object> map){
User tom = new User(1, "Tom", "123456", "tom@qq.com");
map.put("user",tom);
}
- 该注解可以修饰目标方法POJO类型的入参,其value属性值作用:
- springmvc会使用value属性值再implicitModel中查找对应的对象,若存在则会直接传入到目标的入参中
- springmvc会将value为key,POJO类型的对象为value,存入到request
@ModelAttribute修饰入参
@RequestMapping(value = "test4")
public String test4(User user){
System.out.println(user);
return "ModelAndViews";
}
这段程序的作用是
1、创建一个新的POJO
2、把这个POJO装到request域中(且键key会自动变成类名的开头小写,即user)
@ModelAttribute就是用来自定以这个键名字的
我们先用modelAttribute在request域中放置一个键为tom,值为user对象的键值对
@ModelAttribute
public void getUser(@RequestParam(value="id",required = false) Integer id,Map<String, Object> map){
User tom = new User(1, "Tom", "123456", "tom@qq.com");
map.put("tom",tom);
}
我们在RequestMapping中也传入一个POJO
- 使用了注解为这个POJO有一个键名,叫tom
- springmvc会先从request域中去找tom为键的键值对
- springmvc就会去sessionAttribute中tom为键的键值对(当找不到就会报错)
- 如果找到了就会进行覆盖操作
- 如果没有找到,会再创建一个新的
@RequestMapping(value = "test4")
public String test4(@ModelAttribute("tom") User user){
System.out.println(user);
return "ModelAndViews";
}
@SessionAttribute注解报错
了解@ModelAttribute修饰入参内部会做什么
- 使用了注解为这个POJO有一个键名,叫tom
- springmvc会先从request域中去找tom为键的键值对
- springmvc就会去sessionAttribute中tom为键的键值对(当发现sessionAttribute中有这个键值,但是这个键值其实还没有存放东西就会报错)
- 如果找到了就会进行覆盖操作
- 如果没有找到,会再创建一个新的
解决方法:
1、我们让@ModelAttribute修饰的那个POJO名字不要和@SessionAttribute中存的键名不要一致即可
2、用@ModelAttribute修饰的方法在request域中就放一个tom对象
@ModelAttribute
public void getUser(@RequestParam(value="id",required = false) Integer id,Map<String, Object> map){
User tom = new User(1, "Tom", "123456", "tom@qq.com");
map.put("tom",tom);
}
springMVC-4-处理模型数据的更多相关文章
- springMVC(6)---处理模型数据
springMVC(6)---处理模型数据 之前一篇博客,写个怎么获取前段数据:springMVC(2)---获取前段数据,这篇文章写怎么从后端往前端传入数据. 模型数据类型 ...
- SpringMvc:处理模型数据
SpringMvc提供了以下途径输出模型数据: -ModelAndView:处理方法返回值类型为ModelAndView,方法体即可通过该对象添加模型数据 -Map或Model:入参为org.spri ...
- SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute
Spring MVC提供了以下几种途径输出模型数据:1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据:2)Map及Model:处理方法入参 ...
- SpringMVC(九):SpringMVC 处理输出模型数据之ModelAndView
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- SpringMVC(十一):SpringMVC 处理输出模型数据之SessionAttributes
Spring MVC提供了以下几种途径输出模型数据:1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据:2)Map及Model:处理方法入参 ...
- SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model
Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...
- Spring MVC 处理模型数据(@ModelAttribute)
SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据. 直白来讲,上面这句话的意思就是:当有一个查询的请求, ...
- springmvc学习(五)——处理模型数据
Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...
- SpringMVC(十五) RequestMapping map模型数据
控制器中使用map模型数据,传送数据给视图. 控制器参考代码: package com.tiekui.springmvc.handlers; import java.util.Arrays; impo ...
- SpringMVC系列(六)处理模型数据
Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据 Map 及 Model: ...
随机推荐
- SQL Parameter参数的用法
SqlParameter 类 表示 SqlCommand 的参数,也可以是它到 DataSet 列的映射. 无法继承此类. 命名空间: System.Data.SqlClient 程序集: Sys ...
- VLAN与三层交换机
VLAN概述与优势 ①分割广播域 物理分割 逻辑分割 ②VLAN的优势 控制广播 增强网络安全性 简化网络管理 VLAN的范围 VlAN ID范围 范围 用途 0,4095 保留 仅限系统使用,用户 ...
- QT基本数据类型
因为Qt是一个C++框架, 因此C++中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数类型. QT基本数据类型定义在#inclu ...
- Kubernetes 实战——配置应用(ConfigMap、Secret)
配置容器化应用的方式:①命令行参数:②环境变量:③文件化配置 一.向容器传递命令行参数或环境变量 这两种方式在 Pod 创建后不可被修改 1. 在Docker中定义命令与参数 ENTRYPOINT:容 ...
- 【NX二次开发】查找部件中的对象 UF_OBJ_cycle_objs_in_part
返回所有层上指定类型部件中的所有对象,不管它们的当前显示状态如何.这个例程不返回表达式.指定对象.临时(系统创建的)对象或休眠对象.休眠对象指的是从模型中删除的对象例如,如果你混合了一条边,那么这条边 ...
- 使用charles抓取https的方法
自己整理的步骤做个记录 1.下载证书,官方地址:http://www.charlesproxy.com/ssl.zip 可直接点击链接下载:http://charlesproxy.com/getssl ...
- 【题解】SOFTWARE 二分+搜索/dp
题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是 ...
- ORA-09817:Write to audit file failed
ERROR: ORA-09817: Write to audit file failed. --这种错误基本是磁盘空间满了 问题描述:sqlplus / as sysdba登不上,报上述ora-098 ...
- 如何设置Python环境变量
大家好,我是Yivies.相信很多python的初学者们在进行一顿下一步下一步的安装之后,在windows command命令行输入python的时候会出现这样的情况: 可我们希望它是这样子的: 其实 ...
- Jrebel、IDEA的激活与Springloaded使用
又有很长一段时间没写了,这次这篇随笔主要是分享下Jrebel与IDEA的激活方法以及推荐下Jrebel的替代工具Springloaded. 先来说下Jrebel的激活方法吧,之前有同事遇到了Jrebe ...