返回模型数据(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. 如何在CPU上优化GEMM(下)

    如何在CPU上优化GEMM(下) Array Packing 另一个重要的技巧是数组打包.这个技巧是对数组的存储维度进行重新排序,将某个维度上的连续访问模式在平滑后转换为顺序模式. 如上图所示,在阻塞 ...

  2. Gbps接口面向汽车应用

    Gbps接口面向汽车应用 Gbps interfaces target automotive appications 巴黎--不久前,移动通信行业是一个领着芯片商的领头羊,命令坐着,脚跟着,然后翻身. ...

  3. kali2020.4中安装nessus 8.14.0

    1.下载软件包 官网下载地址:https://www.tenable.com/downloads/nessus 2.安装nessus dpkg -i /root/Nessus-8.14.0-debia ...

  4. Selective Kernel Networks

    摘要:在标准的卷积神经网络(CNNs)中,每一层的人工神经元的感受野被设计成具有相同的大小.众所周知,视觉皮层神经元的感受野大小受刺激的调节,但在构建cnn时却很少考虑到这一点.我们在神经网络中提出了 ...

  5. 搞清楚Spring事件机制后:Spring的源码看起来简单多了

    本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后 ...

  6. 带你认真了解一下Java分布式系统的基本特性

    一般,分布式系统需要支持以下特性: 资源共享 开放性 并发性 可伸缩性 容错性 透明性 下面分别讨论. 容易理解的 资源共享 一旦授权,可以访问环境中的任何资源 资源:包括硬件(e.g. printe ...

  7. Redission加锁解锁流程

    redission分布式锁的使用 RLock lock = redissonClient.getLock("myLock"); lock.lock(); try { System. ...

  8. Pandas高级教程之:category数据类型

    目录 简介 创建category 使用Series创建 使用DF创建 创建控制 转换为原始类型 categories的操作 获取category的属性 重命名categories 使用add_cate ...

  9. 47、django工程(template)

    47.1.django 模板系统介绍: 1.说明: 我们可以直接将 HTML 硬编码到视图的python代码里,尽管这种技术便于解释视图是如何工作的,但却并不是一个好主意. def current_d ...

  10. nexus AD 集成配置

    nexus AD 集成配置 管理用户登录 点击设置图标-->LDAP-->Create connection 进入AD 集成配置页面 Connection配置 User and group ...