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: ...
随机推荐
- P1828 [USACO3.2]香甜的黄油 Sweet Butter
题目描述 农夫$John$发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道$N(1\leqslant N\leqslant 500)$只奶牛会过来舔它,这样就能做出能卖好价钱的超甜 ...
- 十一、设置Nginx开机自启动
一.创建nginx.service文件 [root@svr7 ~]# vim /lib/systemd/system/nginx.service [Unit]Description=nginx ser ...
- python学习笔记01-简单接触
前言:陆陆续续学习python一年多了,每次都因为各种原因中断了,希望这次可以通过记录更新的方式坚持学完一轮. 简单了解python Python是一种解释型.面向对象.动态数据类型的高级程序设计语言 ...
- Xmanager6 企业版安装
Xmanager6 企业版安装 链接:https://pan.baidu.com/s/1QZOD0iPd4WbVHBVXIbJ-fw 提取码:ebkl 一.安装教程 1.1 下载解压,双击安装exe主 ...
- ceph-csi源码分析(8)-cephfs driver分析
更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(8)-cephfs driver分析 当ceph-csi组件启动 ...
- css中的毛玻璃(不是透明度) 简单文档
其实毛玻璃很简单 只需要在css中加入 backdrop-filter:blur(8px); 8px是模糊力度 注意:使用该方法前需要设置背景不能是透明(如果是显示这个元素下面的图像记得半透明,例子就 ...
- Linux云计算-02_CentOS Linux 7.X系统管理
Linux系统安装完毕,需要对Linux系统进行管理和维护,让Linux服务器能真正应用于企业中. 本章介绍Linux系统32位与64位区别.内核命名规则.引导原理.启动流程.TCP/IP协议概述.I ...
- C# 小知识点记录
1.当计算数据有小数点时不要使用float和double类型的数据,使用这两个会计算不准确.使用decimal 2.如果使用decimal计算数据,遇到除不进的数据有很多小数点的时候,在计算结果后面接 ...
- POJ 1222 高斯消元更稳
大致题意: 有5*6个灯,每个灯只有亮和灭两种状态,分别用1和0表示.按下一盏灯的按钮,这盏灯包括它周围的四盏灯都会改变状态,0变成1,1变成0.现在给出5*6的矩阵代表当前状态,求一个能全部使灯灭的 ...
- SpringCloud:扩展zuul配置路由访问
继续上次整合SpringCloud的demo进行扩展zuul:https://www.cnblogs.com/nhdlb/p/12555968.html 这里我把zuul划分出一个模块单独启动 创建 ...