处理模型数据

Spring MVC 提供了以下几种途径输出模型数据:

  • ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据
  • Map 及 Model: 入参为org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。
  • @SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
  • @ModelAttribute: 方法入参标注该注解后, 入参的对象就会放到数据模型中

ModelAndView

  • 控制器处理方法的返回值如果为 ModelAndView,则其既包含视图信息,也包含模型数据信息。
  • 添加模型数据:
    • MoelAndView addObject(String attributeName, Object attributeValue)
    • ModelAndView addAllObject(Map<String, ?> modelMap)
  • 设置视图:
    • void setView(View view)
    • void setViewName(String viewName)

Map 及 Model

  • Spring MVC 在内部使用了一个 org.springframework.ui.Model 接口存储模型数据

  • 具体步骤

    • Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
    • 如果方法的入参为 Map 或 Model 类 型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据

Map 及 Model 示例

@ModelAttribute("user")
public User getUser() {
User user = new User();
user.setAge(10);
return user;
}
@RequestMapping("/handle20")
public String handle20(Map<String,Object> map) {
map.put("time",new Date());
User user = (User) map.get("user");
user.setEmail("qwer@163.com");
return "success";
}
email:${requestScope.user.email}
<br><br>
time:${requestScope.time}

@SessionAttributes

  • 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes, Spring MVC 将在模型中对应的属性暂存到 HttpSession 中。
  • @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
    • @SessionAttributes(types=User.class) 会将隐含模型中所有类型 为 User.class 的属性添加到会话中。
    • @SessionAttributes(value={“user1”, “user2”})
    • @SessionAttributes(types={User.class, Dept.class})
    • @SessionAttributes(value={“user1”, “user2”}, types={Dept.class})

@SessionAttributes 示例

@SessionAttributes("user")
@Controller
@RequestMapping("/hello")
public class HelloWorld {
@ModelAttribute("user")
public User getUser() {
User user = new User();
user.setAge(10);
return user;
}
}
@RequestMapping("/handle21")
public String hanle21(@ModelAttribute("user") User user) {
user.setAge(22);
return "redirect:/hello/handle22.action"
}
@RequestMapping("/handle22")
public String handle22(Map<String,Object> map,SessionStatus sessionStatus) {
User user = (User) map.get("user");
user.setId(200);
return "success";
}

@ModelAttribute

  • 在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
  • 在方法的入参前使用 @ModelAttribute 注解:
    • 可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
    • 将方法入参对象添加到模型中



@modelattrbute默认

bean 在请求域里面的属性名是类名的第一个字母小写

由@SessionAttributes引发的异常

org.springframework.web.HttpSessionRequiredException:

Session attribute 'user' required - not found in session

如果在处理类定义处标注了@SessionAttributes(“xxx”),则尝试从会话中获取该属性,并将其赋给该入参,然后再用请求消息填充该入参对象。如果在会话中找不到对应的属性,则抛出 HttpSessionRequiredException 异常

如何避免@SessionAttributes引发的异常

使用@ModelAttribute("user")

该方法会往隐含模型中添加一个名为user的模型属性

@Controller
@RequestMapping("/user")
@SessionAttributes("user")
public class UserController {
//该方法会往隐含模型中添加一个名为user的模型属性
@ModelAttribute("user")
public User getUser() {
User user = new User();
return user;
} @RequestMapping(value = "/handle71")
public String handle71(@ModelAttribute(“user”) User user) {
//...
} @RequestMapping(value = "/handle72")
public String handle72(ModelMap modelMap,SessionStatus sessionStatus) {
//...
}
}

补充

map model modelmap

这三个成为入参时mvc会自动将他们放入modelandview中

18

model attributes注解

如果使用model 可以忽略

控制器中的方法的参数是被springmvc以反射的方式创建的 然后赋值,而不是直接赋值

而且参数会放在请求域中,且键值对中的键是默认为类型的第一个字母小写,或者@model attribute注解中的值,键值对中的值就是参数对象

【SpringMVC】处理模型数据的更多相关文章

  1. SpringMvc处理模型数据(也就是从数据库中查询出来的数据放到请求域中)

    这讲的是从数据库中查询到的数据,存放到请求域中.然后页面上直接可以从请求域中获取值. 有4种方式: 1):ModelAndView   是作为一个对象. /** * 目标方法的返回值可以是 Model ...

  2. SpringMVC处理模型数据

    目录结构 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi= ...

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

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

  4. SpringMVC:学习笔记(4)——处理模型数据

    SpringMVC—处理模型数据 说明 SpringMVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添 ...

  5. Spring MVC 处理模型数据

    SpringMVC 处理模型数据: 1 controller接收pojo: <form action="save" method="get"> &l ...

  6. SpringMvc:处理模型数据

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

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

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

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

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

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

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

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

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

随机推荐

  1. linux下服务器稳定性压力测试工具stress安装使用介绍

    linux下服务器稳定性压⼒测试⼯具stress安装使⽤介绍 一.简介 1.stress⼯具是Linux下一款压⼒测试⼯具, 可以模拟系统⾼负载运⾏ , 同时可协助我们进⾏软件稳 定性相关测试. ⼆. ...

  2. x86平台SIMD编程入门(3):浮点指令

    1.算术指令 算术类型 函数示例 备注 加 _mm_add_sd._mm256_add_ps 减 _mm_sub_sd._mm256_sub_ps 乘 _mm_mul_sd._mm256_mul_ps ...

  3. VBA 解析 json

    Sub Macro1() Debug.Print "999" Dim FilePath, strData FilePath = "C:\Git\Test\JenProje ...

  4. 项目PMP之一项目管理介绍

    一.项目定义: 概要:为创造独特的产品.服务或成果而进行的临时性工作 组织创造价值和效益.项目驱动变更创造商业价值的主要方式 特性/要素: 独特的产品.服务或成果,即一个或多个可交付成果(范围.进度( ...

  5. Django环境的Linux安装(使用put方法将本地安装包导入到Linux)

    1.建立Sftp链接 2.使用put命令将本地的安装包拉取到指定目录. 3.使用tar xzvf 命令将安装包解压到创建好的目录. 4.cd Django-* 5.执行安装命令:sudo python ...

  6. ADALM-Pluto修改IP地址

    在 GNURadio 中使用 ADALM-Pluto(以下简称Pluto)模块是以 IP 地址为基础进行通信的,而固定的 IP 地址 192.168.2.1 导致一台电脑无法使用多个 Pluto,因此 ...

  7. PostgreSQL:数据库迁移与版本控制

    title: PostgreSQL:数据库迁移与版本控制 date: 2025/2/6 updated: 2025/2/6 author: cmdragon excerpt: 在现代软件开发中,数据库 ...

  8. linux mint安装kafka,及flume与kafka整合

    需要软件 jdk1.8(jdk-8u131-linux-x64.rpm) zookeeper (zookeeper-3.4.10.tar.gz) kafka 2.11-2.0.0 flume1.8.0 ...

  9. C# DataTable 类使用

    命名空间: System.Data 程序集: System.Data.Common.dll 参考连接:https://docs.microsoft.com/zh-cn/dotnet/api/syste ...

  10. captura怎样解决FFmpeg解析错误问题

    captura怎样解决FFmpeg解析错误问题?captura软件里大家在进行屏幕录制的工作得时候都会用到captura软件,软件得功能可以满足大家的需求,可以轻松的录制屏幕,进行屏幕截屏等,但是又小 ...