SpringMVC—处理模型数据

说明

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

ModelAndView

说明

  一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。
  即,控制器处理方法的返回值如果为ModelAndView,则其中既包含视图信息,也包含模型数据信息

示例

  1.创建ModelAndView,并传入模型数据  

  

  2.编写JSP页面,进行测试

  

说明:SpringMVC会把ModelAndView中的Model中的数据方法Request域对象中。 

Map及Model

说明:

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

  Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。

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

示例:

  

使用MODEL:

  这里传入的Map实际为BindingAwareModelMap,所以我们定义参数用Map即可。  

  

说明:

  并且在这里我们也是可以使用Model类型的。
  

@SessionAttribute

  若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes,Spring MVC将在模型中对应的属性暂存到 HttpSession 中。

 说明:

    注意这个注解只能放到类的上面

  1.首先使用Map将模型数据存到请求域中,然后在类定义处使用@SessionAttributes,拷贝到Session中。

  

  2.编写JSP页面及测试

  

  

补充

  @SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中
  – @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
  – @SessionAttributes(value={“user1”, “user2”})
  – @SessionAttributes(types={User.class, Dept.class})
  – @SessionAttributes(value={“user1”, “user2”},types={Dept.class})

@ModelAttribute

说明:

  前面谈到SpringMVC在每次调用请求处理方法时,都会创建Model类型的一个实例。如果准备使用此实例,则可以在方法中添加一个Model类型的参数。还可以使用在方法中添加@ModelAttribute注释类型来访问Model实例

  可以用@ModelAttribute来注释方法参数:带有@ModelAttribute注解的方法会将其输入或创建的参数对象添加到Model对象中(若方法中没有显式添加)。

  可以用@ModelAttribute标注一个非请求的处理方法:被@ModelAttribute注释的方法会在此controller每个方法执行前被执行。  

基本用法:

  1.在方法上使用@ModelAttribute

  @Controller
  public class UserDao{
    .....
    @ModelAttribute
    public User addUser(User user)
    {
    return new User(201702,"MrSaber");
    }
    .....
  }

说明:

 @ModelAttribute 注解的方法可以返回一个 对象或者一个void类型。如果返回一个对象则默认添加到Model中。若方法返回一个void类型,则还必须自行将实例添加到Model中。

  @Controller
  public class UserDao{
    .....
    @ModelAttribute
    public void addUser(User user,Model model)
    {
...
    model.addAttribute(user);
    }
    .....
  }

  2.在方法参数上使用@ModelAttribute.

@RequestMapping("/save")
public String save(@ModelAttribute("newUser") User user) {
user.setUsername("U love me");
userService.save(user);
return "result";
}

说明:

   输入或创建的User实例将用newUser键值添加到Model对象中。如果未定义将默认用小写名称作为键。

SpringMVC:学习笔记(4)——处理模型数据的更多相关文章

  1. SpringMVC 学习笔记(四) 处理模型数据

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

  2. springmvc学习笔记(18)-json数据交互

    springmvc学习笔记(18)-json数据交互 标签: springmvc springmvc学习笔记18-json数据交互 springmvc进行json交互 环境准备 加入json转换的依赖 ...

  3. 史上最全的SpringMVC学习笔记

    SpringMVC学习笔记---- 一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于Spring ...

  4. SpringMVC:学习笔记(8)——文件上传

    SpringMVC--文件上传 说明: 文件上传的途径 文件上传主要有两种方式: 1.使用Apache Commons FileUpload元件. 2.利用Servlet3.0及其更高版本的内置支持. ...

  5. springmvc学习笔记(简介及使用)

    springmvc学习笔记(简介及使用) 工作之余, 回顾了一下springmvc的相关内容, 这次也为后面复习什么的做个标记, 也希望能与大家交流学习, 通过回帖留言等方式表达自己的观点或学习心得. ...

  6. springmvc学习笔记(常用注解)

    springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...

  7. SpringMVC学习笔记之二(SpringMVC高级参数绑定)

    一.高级参数绑定 1.1 绑定数组 需求:在商品列表页面选中多个商品,然后删除. 需求分析:功能要求商品列表页面中的每个商品前有一个checkbok,选中多个商品后点击删除按钮把商品id传递给Cont ...

  8. springMVC 学习笔记(一):springMVC 入门

    springMVC 学习笔记(一):spring 入门 什么是 springMVC springMVC 是 spring 框架的一个模块,springMVC 和 spring 无需通过中间整合层进行整 ...

  9. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

随机推荐

  1. gsub函数

    gsub(r, s [, t])    For each substring matching the regular expression r in the string t, substitute ...

  2. org.tmatesoft.svn.core.SVNCancelException: svn: E200015: authentication canc

    重新添加一个凭证,用新的凭证 第二总是取最新的代码,而不是用update 有问题,问哥

  3. python之函数enumerate()

    enumerate函数可以遍历列表 for i in range(len(a)): print a[i] 等价于: for index,item in enumerate(a): print inde ...

  4. js获取object类型所有的键值对

    万物皆对象,而对象完全可以用键值对来表示,所以,在js中,也是通过键值对来表示对象的,在开发中,我在修改的时候,知道属性值可以直接用点.符号来获取值,但是写common.js的时候,发现这个属性名称是 ...

  5. android EditText 限定中文个数与英文个数的解决方式

    EditText 限定中文8个英文16个的解决方法. 在EditText上控件提供的属性中有限定最大最小长度的方法. 可是,对于输入时,限定中文8个英文16个时,怎么办?相当于一个中文的长度是两个英文 ...

  6. python:编写行政区域三级菜单(day 1)

    地区分三层结构例如: 大中华地区一级划分: 华东 华中 华北 西南 特别行政区 华南 ------------------------------------------------- 请输入你要查看 ...

  7. 面试十大常见Java String问题

    本文介绍Java中关于String最常见的10个问题: 1. 字符串比较,使用 "==" 还是 equals() ?简单来说, "==" 判断两个引用的是不是同 ...

  8. 【BZOJ4724】[POI2017]Podzielno 数学+二分

    [BZOJ4724][POI2017]Podzielno Description B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零, ...

  9. M - Tempter of the Bone(DFS,奇偶剪枝)

    M - Tempter of the Bone Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  10. 项目中调用ExcelCom组件时的配置流程

    异常提示如下:         Microsoft Office Excel 不能访问文件“*.xls”. 可能的原因有:        1 文件名称或路径不存在.       2 文件正被其他程序使 ...