返回模型数据(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-处理模型数据的更多相关文章

  1. springMVC(6)---处理模型数据

    springMVC(6)---处理模型数据 之前一篇博客,写个怎么获取前段数据:springMVC(2)---获取前段数据,这篇文章写怎么从后端往前端传入数据. 模型数据类型             ...

  2. SpringMvc:处理模型数据

    SpringMvc提供了以下途径输出模型数据: -ModelAndView:处理方法返回值类型为ModelAndView,方法体即可通过该对象添加模型数据 -Map或Model:入参为org.spri ...

  3. SpringMVC(十二):SpringMVC 处理输出模型数据之@ModelAttribute

    Spring MVC提供了以下几种途径输出模型数据:1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据:2)Map及Model:处理方法入参 ...

  4. SpringMVC(九):SpringMVC 处理输出模型数据之ModelAndView

    Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...

  5. SpringMVC(十一):SpringMVC 处理输出模型数据之SessionAttributes

    Spring MVC提供了以下几种途径输出模型数据:1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据:2)Map及Model:处理方法入参 ...

  6. SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model

    Spring MVC提供了以下几种途径输出模型数据: 1)ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据: 2)Map及Model:处理方法 ...

  7. Spring MVC 处理模型数据(@ModelAttribute)

    SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据. 直白来讲,上面这句话的意思就是:当有一个查询的请求, ...

  8. springmvc学习(五)——处理模型数据

    Spring MVC 提供了以下几种途径输出模型数据: ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据Map 及 Model: 入参 ...

  9. SpringMVC(十五) RequestMapping map模型数据

    控制器中使用map模型数据,传送数据给视图. 控制器参考代码: package com.tiekui.springmvc.handlers; import java.util.Arrays; impo ...

  10. SpringMVC系列(六)处理模型数据

    Spring MVC 提供了以下几种途径输出模型数据:  ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据  Map 及 Model: ...

随机推荐

  1. OpenCV读写视频文件解析

    OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在 OpenCV 中,VideoCapture ...

  2. 【NX二次开发】Block UI 指定轴

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  3. EVB_Air724UG_A13开发板使用指南

      Air724 是上海合宙物联网于2020年3月下旬发布的一款基于UIS8910DM芯片组的物联网通讯模块. 模块通讯性能优越,符合Cat1通讯标准,支持最大下行速率 10Mbps 和最大上行速率5 ...

  4. csp-s模拟测试57(10.2)「天空龙」·「巨神兵」·「太阳神」

    题目是古埃及神话??? A. 天空龙 傻逼模拟,看来没有滑天下之大稽QAQ,也没有打错快读(大雾...) B. 巨神兵 难度爆增,一脸懵比..... 60分状压: 因为是求有向图,关于有向图好像拓扑用 ...

  5. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  6. theUnforgiven——项目冲刺

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/computer-science-class1-2018/ 小组号和队名 8组theUnforgiven ...

  7. element的日期选择使用value-format之后表单验证报错

    在表单验证的时候报错 添加一个日期控件,但是发现在表单验证中遇到了冲突如下: Error in event handler for "el.form.change": " ...

  8. Unity3D 本地数据持久化几种方式

    下面介绍几种 Unity本地记录存储的实现方式. 第一种 Unity自身提供的 PlayerPrefs //保存数据 PlayerPrefs.SetString("Name",mN ...

  9. Maven——基础篇

    Maven--基础篇 Maven出现前的问题 一个项目就是一个工程,而工程内一般是通过package包来分模块,比较用户模块,订单模块等,如果项目过于庞大,通过包模块来划分就不太合适,而应该拆分为模块 ...

  10. 『无为则无心』Python序列 — 20、Python元组的介绍与使用

    目录 1.元组的应用场景 2.定义元组 3.元组的常见操作 @1.按下标查找数据 @2.index()方法 @3.count()方法 @4.len()方法 4.元祖中的列表元素 5.扩展:序列封包和序 ...