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: ...
随机推荐
- VTA:深度学习加速器堆栈
VTA:深度学习加速器堆栈 多功能Tensor加速器(VTA)是一个开放的,通用的,可定制的深度学习加速器,具有完整的基于TVM的编译器堆栈.设计VTA来展示主流深度学习加速器的最显着和共同的特征.T ...
- 开发平台支持Arm Cortex-M的微控制器上人工智能训练
开发平台支持Arm Cortex-M的微控制器上人工智能训练 Development platform enables AI training on Arm Cortex-M-based microc ...
- C#后台定义一个DataTable并手动写入静态数据(测试数据)
//创建一个DataTable,并为之添加数据(自定义DataTable) DataTable dtz = new DataTable(); //添加Table中的列 DataColumn dc1 = ...
- 解决:django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not 的方法
错误类型: 该错误是在在创建Django工程时出现遇到的错误 完整报错信息:(博文标题输入长度有限制) django.core.exceptions.ImproperlyConfigured: Req ...
- 【Javascript + Vue】实现随机生成迷宫图片
前言 成品预览:https://codesandbox.io/s/maze-vite-15-i7oik?file=/src/maze.js 不久前写了一篇文章介绍了如何解迷宫:https://www. ...
- 如何优雅的实现Mysql 增删改查,看完你就会了
接着上期说,上期没写一条sql就把数据查询出来了,那如果要保存或者更新数据怎么办呢?能不能自己写sql呢? 保存数据 @GetMapping("save")//保存数据 publi ...
- python使用venv
venv模块支持使用自己的站点目录创建轻量级"虚拟环境",可选择与系统站点目录隔离.每个虚拟环境都有自己的Python二进制文件(与用于创建此环境的二进制文件的版本相匹配),并且可 ...
- DDoS攻击的工具介绍
1.低轨道离子加农炮(LOIC) 1.1 什么是低轨道离子加农炮(LOIC)? 低轨道离子加农炮是通常用于发起DoS和DDoS攻击的工具.它最初是由Praetox Technology作为网络压力测试 ...
- Linux中Crontab的用法
1.crontab的概念: crontab命令用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行.可以使用它在每天的 ...
- 4、git和gitlab的配置(2)
4.10.使用 gitlib 模拟开发流程: 1.项目经理指定开发计划: project01 需求 开发者 完成日期 v1.0 首页 dev01 4.28 支付 dev02 4.30 2.rpm(项目 ...