前言

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

三种方式处理模型数据

  1. Map.put(string,object);
  2. Model.AddAttribute(string,object);
  3. ModelMap.AddAttribute(string,object);

注·:以上三种方式向前端传值,不能加@responsebody注解

Model(org.springframework.ui.Model)

Model是一个接口,包含addAttribute方法。

一个控制器可以拥有多个@ModelAttribute方法。同个控制器内的所有这些方法,都会在@RequestMapping方法之前被调用。
@ModelAttribute标记的方法会先执行,然后把它们返回的对象存放到模型中。 //@ModelAttribute修饰的方法:当/login请求时,会先于/login调用,该方法用于接收前台jsp页面传入的参数
@ModelAttribute("user1")
public void userModel(String name,String password,Model model){
// 创建User对象存储jsp页面传入的参数
User user = new User();
user.setName(name);
user.setPassword(password); // 将User对象添加到Model当中
model.addAttribute("user2", user); return new User("ld",12) ;
} @RequestMapping(value="/login")
public String login(Model model){
// 从Model当中取出之前存入的名为user的对象
User user2 = (User) model.asMap().get("user2");
return "result";
} 也可以:
@RequestMapping(value = "/login")
public String login(@ModelAttribute("user1") User user1) {
user1.setUserName("jizhou");
return "result";
}

ModelMap(org.springframework.ui.ModelMap)

Mode还是ModelMap底层都是使用BindingAwareModelMap,所以两者基本没什么区别

Spring框架自动创建modelmap的实例,并作为controller方法的参数传入,用户无需自己创建对象。

ModelMap对象主要用于把controller方法处理的数据传递到jsp界面,在controller方法中把jsp界面需要的数据放到ModelMap对象中即可。

ModelAndView(org.springframework.web.servlet.ModelAndView)

ModelAndView对象有两个作用:

  1. 设置url地址(这也是ModelAndView和ModelMap的主要区别)。

  2. 把controller方法中处理的数据传到jsp页面,在controller方法中把jsp界面需要的数据放到ModelAndView对象中即可。

    Model是每次请求可以自动创建的,而ModelAndView是需要自行new

    在界面上可以通过el表达式${key}来获取Model中的数据。

controller方法的返回值如果是ModelAndView,则其即包含模型数据信息,又包含视图信息,这样SpringMVC将使用包含的视图对模型数据进行渲染,可以简单地将模型数据看成一个Map<String, Object>对象。

    @RequestMapping("/list")
public ModelAndView list() {
//创建一个模型视图对象
ModelAndView mav = new ModelAndView();
List<Category> cs = categoryService.list();
mav.addObject("cs", cs);
mav.setViewName("admin/listCategory");
return mav;
}

@SessionAttributes

@SessionAttributes用于在会话中存储Model的属性,一般作用在类的级别。
@SessionAttributes(value={"user"})将model中属性名为user的数据copy一份进了session域中。 model的属性user1会被存储到session中 @Controller
@SessionAttributes(value={"user1","attr2"})
public class ModelController { @ModelAttribute("user1")
public User initUser(){
User user1 = new User();
user1.setName("default");
return use1r;
}
} @SessionAttribute是用于获取已经存储的session数据,并且作用在方法的层面上。 @RequestMapping("/user")
public String session(@SessionAttribute("user1") User user1){
// do something
return "success";
} @SessionAttributes(types=User.class)
会将model中所有类型为 User 的属性添加到会话中。 @SessionAttributes(value={"user1", "user2"})
会将model中属性名为user1和user2的属性添加到会话中。 @SessionAttributes(types={User.class, Dept.class})
会将model中所有类型为 User 和 Dept 的属性添加到会话中。 @SessionAttributes(value={"user1", "user2"},types={Dept.class})
会将model中属性名为user1和user2以及类型为Dept的属性添加到会话中。

Model ModelMap ModelAndView的更多相关文章

  1. Model & ModelMap & ModelAndView 比较ModelFactory简介

    Model: 是一个接口,其实现类必继承ModelMap. ModelMap: 继承与LinkedHashMap,相当于自定义了一个map. ModelAndView: 里面封装了两个对象,其中vie ...

  2. SpringMVC Map Model ModelMap 和 ModelAndView

    代码: package com.gaussic.controller; import com.gaussic.model.AccountModel; import org.springframewor ...

  3. springMVC Model ModelMap 和 ModelAndView的区别(转)

    原文地址:springMVC Model ModelMap 和 ModelAndView的区别 近来在看代码,发现controller里有不同的处理返回数据的方式,而自己一直在用ModelAndVie ...

  4. Spring中Model,ModelMap以及ModelAndView之间的区别

    原文链接:http://blog.csdn.net/zhangxing52077/article/details/75193948 Spring中Model,ModelMap以及ModelAndVie ...

  5. Model/ModelMap 和 ModelAndView 的区别使用

    Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...

  6. SpringMVC学习 -- ModelAndView , Model , ModelMap , Map 及 @SessionAttributes 的使用

    输出模型数据: ModelAndView:处理方法返回值类型为 ModelAndView 时 , 其中包含视图和模型信息.方法体即可通过该对象添加模型数据 , 即 SpringMVC 会把 Model ...

  7. SpringMVC Model,ModelMap ModelAndView

    SpringMVC 调用方法之前会创一个隐含的模型对象(即Model,ModelMap ModelAndView) //@ModelAttribute 先于login方法执行 @ModelAttrib ...

  8. springboot中model,modelandview,modelmap的区别与联系

    springboot 中Model,ModelAndView,ModelMap的区别与联系 Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类 public c ...

  9. Model和ModelAndView

    在请求处理方法可出现和返回的参数类型中,最重要的就是Model和ModelAndView.对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据Model,而试图View则用于渲染模 ...

随机推荐

  1. <随便写>软件设计遵循的基本原则

    1.高内聚,低耦合 所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则. 所谓低耦合,是指一个软件系统内不同 ...

  2. C# 获取系统开机时间

    原文:C# 获取系统开机时间 ///         ///  获取系统开机时间          ///         ///         private DateTime GetComput ...

  3. Handler Looper源码解析(Android消息传递机制)

    Android的Handler类应该是常用到的,多用于线程间的通信,以及子线程发送消息通知UI线程刷新View等等.这里我主要总结下我对整个消息传递机制,包括Handler,Looper,Messag ...

  4. 看了Google编码规范,我突然有个感觉

    那么个编码规范,充分体现了西方人的自我感觉良好,以及以自己为中心的程度, 以及西方人对待事物的双重标准.

  5. 微信1.8.6.1 SDK 无法授权登录解决办法

    我用的cocos2d-lua 3.9 项目打包 调用微信授权登录的时候 授权登录接口一直抛异常导致微信都无法拉起来 按照官网配置了universal link (这个也搞了很长时间jason 配置文件 ...

  6. SQLite 小调研

    一. 概况: SQLite 是 D. Richard Hipp 于 2000 年采用 C 语言编写的一个轻量级.跨平台的关系型数据库,支持大部分 SQL92 标准(比如视图.事务.触发器.blob 数 ...

  7. pandas-append()

    DataFrame.append(self,other,ignore_index = False,verify_integrity = False,sort = Nore) 作用是将其他对象附加到调用 ...

  8. nodejs 在MYSQL 数据库中插入和查询数据

    插入前的数据库: 插入后的数据库: 输出结果: demo var mysql = require('mysql'); var connection = mysql.createConnection({ ...

  9. 初始化workbook时可能忽略的问题

    正常情况下解析excel 先初始化workbook,使用文件名称后缀来初始化的. 一般情况下 这种是没有问题的,但是当遇到如果是07版本的 xlsx结尾的文件 改了后缀 为xls后 解析就会发生异常 ...

  10. Centos7.5 安装sonarqube-7.1

    下载sonarqube-7.1 wget -t 0 -c https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.1.z ...