SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据。

直白来讲,上面这句话的意思就是:当有一个查询的请求,控制器(C)会把请求拦截下来,然后把根据请求的内容对它进行分配适合的处理方法,在处理方法上进行处理查询的业务逻辑,得到了数据,再把数据封装成数据模型对象,最后把数据模型(M)对象传给了视图(V),让视图去渲染数据模型。
 
-----以下内容来自《Spring3.0就这么简单》
我们知道SpringMVC通过@RequestMapping将请求引导到处理方法上,使用适合的方法签名(@RequestParam/@PathVariable等)将请求消息绑定到入参中(入参:方法的参数)。方法入参绑定请求消息只是处理方法第一步,还有更为重要的任务等待完成,即根据入参执行相应的逻辑,产生模型数据,导向到特定视图。
 
 
如何将模型数据输出给视图是SpringMVC框架的一项重要工作,SpringMVC提供了以下几种途径输出模型数据:
  • ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据。
  • @ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
  • Map及Model:入参为org.springframework.ui.Model、org.springframework.uiModelMap或java.util.Map时,处理方法返回时,Map中的数据会自动添加到模型中。
  • @SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性。
 
在这里只讲解@ModelAttribute的使用和理解:
@ModelAttribute相当于是什么?
自己的理解:
        我觉得@ModelAttribute其实相当于我们自己手动操作封装对象的过程,比如说:在Servlet中,本来是要我们自己从request中获取请求参数,然后进行封装成对象,根据这个封装好的对象进行业务逻辑操作,最终从Dao层获取到返回的数据,我们再把这些数据封装成对象,返回给视图jsp。视图jsp就可以使用el表达式等方式直接调用。@ModelAttribute就是解决了我们自己手动操作封装对象、传递对象给视图的操作。
 
@ModelAttribute放置的位置不同也有不同的功能。那么@ModelAttribute可以放置在哪些位置呢?如下:
  • 可以在方法入参上使用@ModelAttribute注解
  • 还可以在方法定义中使用@ModelAttribute注解
  1. 放在方法入参上使用:
//UserController.java在方法入参处使用@ModelAttribute
@RequestMapping(value="/model")
public String handleModel(@ModelAttribute("user") User user){
user.setUserId("1000");
return "/user/createSuccess";
}
SpringMVC 将请求消息绑定到User对象中,然后再以“user”为键将User对象放到模型中。
在准备对视图进行渲染前,SpringMVC还会进一步将模型中的数据转储到视图的上下文中以暴露给视图对象。
对于JSP视图来说,SpringMVC会将模型数据转储到ServletRequest的属性列表中(即通过ServletRequest#setAttribute(String name,Object o )保存)。
handleModel()返回的逻辑视图名为 /user/createSuccess,对应createSuccess.jsp视图对象,这样createSuccess.jsp就可以使用${user.userName}等方式顺利访问到模型中的数据了。
 
   2.  在方法定义中使用@ModelAttribute注解:
除了可以在方法入参上使用@ModelAttribute注解,还可以在方法定义中使用@ModelAttribute注解。SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,并将这些方法的返回值添加到模型中。如下:
@ModelAttribute("user")
public User getUser(){ <---1//访问UserController中的任何一个请求处理方法前,
User user = new User(); //SpringMVC先执行该方法,并将返回值以user为键添加到模型中
user.setUserId("1001");
return user;
}
@RequestMapping(value="/model")
public String handleModel(@ModelAttribute("user") User user){ <---2 //在此,模型数据会赋给User的入参,
user.setUserName("tom"); //然后再根据HTTP请求消息进一步填充覆盖user对象
return "/user/showUser";
}
当访问UserController中的任何一个请求处理方法前,都会事先执行标注了@ModelAttribute的getUser()方法,并将其返回值以user为键添加到模型中。
由于 ② 处的handleModel()方法使用了入参级的@ModelAttribute注解,且属性名和 ① 处方法级@ModelAttribute的属性名相同。这时,SpringMVC会将 ① 处获取的模型属性先赋值给 ② 处的人参user,然后再根据HTTP请求消息对user进行填充覆盖,得到一个整合版本的user对象。
 
提示: 处理方法入参最多只能使用一个SpringMVC的注解,如 handleModel (@ModelAttribute("user") User user)的user入参使用了@ModelAttribute,就不能再使用@RequestParam或@CookieValue。如果使用了两个注解,SpringMVC就跑出异常。 
 
注:由于参考网上内容太多,忘记了出处...如有侵权请告知,Email: JamKong@126.com

SpringMVC中的模型数据是非常重要的,因为MVC中的控制(C)请求处理业务逻辑来生成数据模型(M),而视图(V)就是为了渲染数据模型的数据。

直白来讲,上面这句话的意思就是:当有一个查询的请求,控制器(C)会把请求拦截下来,然后把根据请求的内容对它进行分配适合的处理方法,在处理方法上进行处理查询的业务逻辑,得到了数据,再把数据封装成数据模型对象,最后把数据模型(M)对象传给了视图(V),让视图去渲染数据模型。
 
-----以下内容来自《Spring3.0就这么简单》
我们知道SpringMVC通过@RequestMapping将请求引导到处理方法上,使用适合的方法签名(@RequestParam/@PathVariable等)将请求消息绑定到入参中(入参:方法的参数)。方法入参绑定请求消息只是处理方法第一步,还有更为重要的任务等待完成,即根据入参执行相应的逻辑,产生模型数据,导向到特定视图。
 
 
如何将模型数据输出给视图是SpringMVC框架的一项重要工作,SpringMVC提供了以下几种途径输出模型数据:
  • ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据。
  • @ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
  • Map及Model:入参为org.springframework.ui.Model、org.springframework.uiModelMap或java.util.Map时,处理方法返回时,Map中的数据会自动添加到模型中。
  • @SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性。
 
在这里只讲解@ModelAttribute的使用和理解:
@ModelAttribute相当于是什么?
自己的理解:
        我觉得@ModelAttribute其实相当于我们自己手动操作封装对象的过程,比如说:在Servlet中,本来是要我们自己从request中获取请求参数,然后进行封装成对象,根据这个封装好的对象进行业务逻辑操作,最终从Dao层获取到返回的数据,我们再把这些数据封装成对象,返回给视图jsp。视图jsp就可以使用el表达式等方式直接调用。@ModelAttribute就是解决了我们自己手动操作封装对象、传递对象给视图的操作。
 
@ModelAttribute放置的位置不同也有不同的功能。那么@ModelAttribute可以放置在哪些位置呢?如下:
  • 可以在方法入参上使用@ModelAttribute注解
  • 还可以在方法定义中使用@ModelAttribute注解
  1. 放在方法入参上使用:
//UserController.java在方法入参处使用@ModelAttribute
@RequestMapping(value="/model")
publicString handleModel(@ModelAttribute("user")User user){
user.setUserId("1000");
return"/user/createSuccess";
}
SpringMVC 将请求消息绑定到User对象中,然后再以“user”为键将User对象放到模型中。
在准备对视图进行渲染前,SpringMVC还会进一步将模型中的数据转储到视图的上下文中以暴露给视图对象。
对于JSP视图来说,SpringMVC会将模型数据转储到ServletRequest的属性列表中(即通过ServletRequest#setAttribute(String name,Object o )保存)。
handleModel()返回的逻辑视图名为 /user/createSuccess,对应createSuccess.jsp视图对象,这样createSuccess.jsp就可以使用${user.userName}等方式顺利访问到模型中的数据了。
 
   2.  在方法定义中使用@ModelAttribute注解:
除了可以在方法入参上使用@ModelAttribute注解,还可以在方法定义中使用@ModelAttribute注解。SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,并将这些方法的返回值添加到模型中。如下:
@ModelAttribute("user")
publicUser getUser(){ <---1//访问UserController中的任何一个请求处理方法前,
User user =newUser(); //SpringMVC先执行该方法,并将返回值以user为键添加到模型中
user.setUserId("1001");
return user;
}
 
@RequestMapping(value="/model")
publicString handleModel(@ModelAttribute("user")User user){ <---2 //在此,模型数据会赋给User的入参,
user.setUserName("tom"); //然后再根据HTTP请求消息进一步填充覆盖user对象
return"/user/showUser";
}
当访问UserController中的任何一个请求处理方法前,都会事先执行标注了@ModelAttribute的getUser()方法,并将其返回值以user为键添加到模型中。
由于 ② 处的handleModel()方法使用了入参级的@ModelAttribute注解,且属性名和 ① 处方法级@ModelAttribute的属性名相同。这时,SpringMVC会将 ① 处获取的模型属性先赋值给 ② 处的人参user,然后再根据HTTP请求消息对user进行填充覆盖,得到一个整合版本的user对象。
 
提示: 处理方法入参最多只能使用一个SpringMVC的注解,如 handleModel (@ModelAttribute("user") User user)的user入参使用了@ModelAttribute,就不能再使用@RequestParam或@CookieValue。如果使用了两个注解,SpringMVC就跑出异常。 

Spring MVC 处理模型数据(@ModelAttribute)的更多相关文章

  1. Spring MVC 处理模型数据

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

  2. ajax使用向Spring MVC发送JSON数据出现 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported错误

    ajax使用向Spring MVC发送JSON数据时,后端Controller在接受JSON数据时报org.springframework.web.HttpMediaTypeNotSupportedE ...

  3. Spring MVC前后端数据交互总结

    控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...

  4. Spring MVC返回json数据给Android端

    原先做Android项目时,服务端接口一直是别人写的,自己拿来调用一下,但下个项目,接口也要自己搞定了,我想用Spring MVC框架来提供接口,这两天便抽空浅学了一下该框架以及该框架如何返回json ...

  5. Spring MVC @InitBinder 数据绑定 & 数据格式化 & 数据校验

    1 数据绑定 2 数据格式化 修改绑定的字段等等操作 日期 - 接收表单日期字符串格式内容.,在实体类加入@DateTimeFormat 数值 原理: DefautFormattingConversi ...

  6. Spring MVC之JSON数据交互和RESTful的支持

    1.JSON概述 1.1 什么是JSON JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式.它是基于JavaScript的一个子集,使用了C.C ...

  7. Spring MVC 返回json数据 报406错误 问题解决方案

    将jackson jar包改为jackson-databind-2.5.0.jar  jackson-core-2.5.0.jar  jackson-annotations-2.5.0.jar(这个版 ...

  8. Spring MVC生成JSON数据

    以下示例演示如何使用Spring Web MVC框架生成JSON数据格式.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: ...

  9. spring mvc 返回json数据的四种方式

    一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...

随机推荐

  1. Docker如何为企业产生价值?

    一个 IT 系统大致可以分为: 应用程序 运行时平台(bin/framework/lib) 操作系统 硬件(基础设施) 开发人员的主要工作是应用程序的编码.构建.测试和发布,涉及应用程序和运行时平台这 ...

  2. HTML5移动Web开发(五)——移动设计之CSS媒介查询

    CSS媒介查询(media query)是响应式设计中很重要的部分,它帮助你实现更加灵活的移动设计. 看示例代码ch01r06_c.html <!doctype html> <htm ...

  3. 【LeetCode】Self Crossing(335)

    1. Description You are given an array x of n positive numbers. You start at point (0,0) and moves x[ ...

  4. js中页面刷新和页面跳转的方法总结

    .js中cookie的基本用法简介 2009-12-15 js中页面刷新和页面跳转的方法总结 文章分类:Web前端 关键字: javascript js中页面刷新和页面跳转的方法总结 1.histor ...

  5. Pentaho Kettle 6.1连接CDH5.4.0集群

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 欢迎转载 最近把之前写的Hadoop MapReduce程序又总结了下,发现很多逻辑基本都是大致相同的,于是想到 ...

  6. Azure ARM (4) 开始创建ARM Resource Group并创建存储账户

    <Windows Azure Platform 系列文章目录> 好了,接下来我们开始创建Azure Resource Group. 1.我们先登录Azure New Portal,地址是: ...

  7. 用Vue实现一个全选指令

    最近用vue做了两个项目,都需要实现全选反选的功能,两个项目用了两种实现方法,第一个项目用vue的computed,第二个项目用指令来实现,用起来,发觉指令更加方便. 第一次做全选的时候是刚开始接触v ...

  8. 补充ICache

    using System; using System.Collections.Generic; using System.Threading.Tasks; namespace System { /// ...

  9. 利用Travis CI 让你的github项目持续构建

    Travis CI 是目前新兴的开源持续集成构建项目,它与jenkins,GO的很明显的特别在于采用yaml格式,简洁清新独树一帜.目前大多数的github项目都已经移入到Travis CI的构建队列 ...

  10. 【转载】8天学通MongoDB——第三天 细说高级操作

    今天跟大家分享一下mongodb中比较好玩的知识,主要包括:聚合,游标. 一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. &l ...