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. Silverlight-管理独立存储(Isolated Storage)

    Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight 随意的创建.读取.写入.删除目录和文件,它有一些类似于Cookie,但是它可以在客户端保存大 ...

  2. 在海思hisiv100nptl平台上交叉编译并安装SRS

    ./configure --with-arm-ubuntu12 && make 须要安装: apt-get installgcc-arm-linux-gnueabi     ,但hi3 ...

  3. Mysql 5.7 liunx 忘记密码的补救方法

    linux下mysql的root密码忘记解决方 1.修改MySQL的登录设置 # vim /etc/my.cnf 在[mysqld]的段中加上一句: skip-grant-tables 例如: [my ...

  4. 基于HTML5 audio元素播放声音jQuery小插件

    by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1609 一.前面的些唠 ...

  5. diamond源码阅读-diamond-server

    diamond-server 1 增加一条数据 /diamond-server/admin.do?method=postConfig 1.1 调用 this.configService.addConf ...

  6. python cPickle和pickle 序列化

    在Python中提供了两个模块:cPickle和pickle来实现序列化,前者是由C语言编写的,效率比后者高很多,一般编写程序的时候,采取的方案是先导入cPickle模块,如果此模块不存在,再导入pi ...

  7. lua(仿单继承)

    --lua仿单继承 Account = { balance = } function Account:new(o) o = o or {} setmetatable(o, self)--Account ...

  8. 初探webpack之环境配置

    先感叹一句,前端的发展真是太快了,ng和bb还没怎么学好就要过时了.现在感觉react当是未来的一个大方向. 以前一直用的grunt,不过前段时间作者已经停止更新了.正好webpack风头正盛,咱也不 ...

  9. Coursera课程《Machine Learning》学习笔记(week1)

    这是Coursera上比较火的一门机器学习课程,主讲教师为Andrew Ng.在自己看神经网络的过程中也的确发现自己有基础不牢.一些基本概念没搞清楚的问题,因此想借这门课程来个查漏补缺.目前的计划是先 ...

  10. 【转】NPOI读写Excel

    1.整个Excel表格叫做工作表:WorkBook(工作薄),包含的叫页(工作表):Sheet:行:Row:单元格Cell. 2.NPOI是POI的C#版本,NPOI的行和列的index都是从0开始 ...