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. Android Service小记

    Service 是Android 的一种组件,跟线程无关. Service 分两种启动方式 startService()和bindService() 两种都需要在Androidmanifest.xml ...

  2. CSS三列布局

    × 目录 两侧定宽中间自适应 两列定宽一侧自适应 中间定宽两侧自适应一侧定宽两列自适应三列自适应总结 前面的话 前面已经介绍过单列定宽单列自适应和两列自适应的两列布局.本文介绍三列布局,分为两侧定宽中 ...

  3. js每天进步一点点3

    JS之样式的改变

  4. Windows Azure Web Site (17) Azure Web Site 固定公网IP地址

    <Windows Azure Platform 系列文章目录> 在之前的文档中,笔者介绍了Azure Web Site是一个多租户的环境,每个部署单元有一个可以通过Internet访问的入 ...

  5. SQL Server安全(4/11):许可(Permissions)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  6. elasticsearch 查询(match和term)

    elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...

  7. CP/IP,SPDY,WebSocket 三者之间的关系

    按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP是应用层的协议.在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议.一.HTTP的 ...

  8. easyui的window插件再次封装

    easyui的window插件再次封装 说明:该插件弹出的弹出框在最顶层的页面中,而不是在当前页面所在的iframe中,它的可拖动范围是整个浏览器窗口:所以不能用JS的parent对象获取弹出它的父页 ...

  9. C# 委托和事件(一):最简单的委托和事件

    C#的事件基于委托,所以先说委托. 一切脱离实际场景的抽象概念新手看上去就像是在扯犊子,不错,我就是个新手.所以我需要一个实际的场景. 明天刚好考试(商务英语),考试上有两个角色(class):老师( ...

  10. iOS阶段学习第四天笔记(循环)

    iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...