1.处理模型数据

Spring MVC 提供了以下几种途径输出模型数据:
     – ModelAndView:处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据
     – Map 及 Model、ModelMap: 入参为 org.springframework.ui.Model、org.springframework.ui. ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。
   
无论返回值是String类型,还是ModelAndView类型,SpringMVC执行Handle方法之后都会将返回值解析为ModelAndView对象
 
我们放入到Map或者Model、ModelMap中的数据都会放入ModelAndView对象中,作为Model使用
 
     – @SessionAttributes::将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性
     – @ModelAttribute: 方法入参标注该注解后, 入参的对象 就会放到数据模型中.
 
2.ModelAndView
     控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。
           添加模型数据:
          – MoelAndView addObject(String attributeName, Object attributeValue)
          – ModelAndView addAllObject(Map<String, ?> modelMap)
           设置视图:
          – void setView(View view)
          – void setViewName(String viewName)
@RequestMapping(value="/testModelAndView")
public ModelAndView testModelAndView(){
ModelAndView mv = new ModelAndView();
mv.setViewName(SUCCESS);//逻辑视图转化为物理视图,去找的视图解析器
mv.addObject("user", "张三");//与request.setAttribute("user","张三")一样作用
return mv;
}

3.Model、Map

     Spring MVC 在内部使用了一个 org.springframework.ui.Model 接口存 储模型数据
          具体步骤
     –     Spring MVC 在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
     –     如果方法的入参为 Map 或 Model 类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据   
@RequestMapping(value="/testMap")
public String testMap(Map<String,Object> map){
map.put("user", new Student("李四", "asd@asd.com"));
return SUCCESS;
}
@RequestMapping(value="/testModelMap")
public String testModelMap(ModelMap model){
model.addAttribute("user", "hah");
return SUCCESS;
}

4.关于重定向

     一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理
     如果返回的字符串中带 forward: 或 redirect: 为前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理
       – redirect:/success.jsp:会完成一个到 success.jsp 的重定向操作
       – forward:/success.jsp:会完成一个到 success.jsp 的转发操作    
 
可以在springmvc配置文件中配置如下代码,我们的请求可以不经过controller,直接进入到另一个页面
<mvc:view-controller path="/redirect" view-name="success"/>

但是此时原来访问正常的@RequestMapping的URL不能正常访问,如要正常访问,加上如下代码

<mvc:annotation-driven></mvc:annotation-driven>

5.@ModelAttribute [使用场景]

     在方法定义上使用 @ModelAttribute 注解:Spring MVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。
     在方法的入参前使用 @ModelAttribute 注解:
          –     可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
          –     将方法入参对象添加到模型中
 
我们每次请前求的方法之都会执行一次
@ModelAttribute
public void getStudent(Map<String, Object> map){
Student student = new Student("zhangsan","zhangsan@163.com");
map.put("stu", student);
} @RequestMapping(value="/toUpdatePage",method=RequestMethod.POST)
public String toUpdatePage(@ModelAttribute(value="stu") Student stu){
System.out.println(stu);
eturn "success";
}

6.SpringMVC确定目标方法POJO类型入参的过程

     1.确定一个key:
          1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,也是默认存在的,则key为POJO类名第一个字母的小写。
          2).若使用@ModelAttribute修饰,则key为@ModelAttribute注解的value属性值
 
     2.在implicitModel【request域】中查找key对应的对象,若存在,则作为入参传入。
        若在@ModelAttribute标记的方法中在Map保存过,且key和1确定的key一致,则会获取到!
 
     3.在implicitModel中不存在key对应的对象,则检查当前的Handler是否使用@SessionAttribute注解修饰,若使用了该注解,且@SessionAttributes注解的value属性值中包含了key,则会从HttpSession中来获取key所对应的value值,若存在则直接传入到目标方法的入参中,若不存在则将抛出异常。
 
     4.若Handler没有标识@SessionAttributes注解或者@SessionAttributes注解的value值中不包含key,则会通过反射【必须有一个无参构造器】来创建 POJO 类型的参数,传入为目标方法的参数。
    
     5.SpringMVC会把 key 和 POJO 对象保存到 implicitModel 中,进而会保存到 request 域中!
    
注意:1.@ModelAttribute 标记的方法,会在每个目标方法执行之前被SpringMVC调用!
          2.@ModelAttribute 注解可以来修饰目标方法 POJO 类型的入参,其 value 属性值有如下作用:
             1) SpringMVC会使用 value 属性值在 implicitModel 中查找对应的对象,若存在则会直接传入到目标方法的入参中
             2) SpringMVC会以 value 为 key , POJO 类型的对象为 value ,存入到 request 域中。
 
7.若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个@SessionAttribute,SpringMVC将在模型中对应的属性暂存到 HttpSession 中
 - 只能标记在类上,可以使得多次请求共享某一部分数据
     values:指定放入session域中的键
     types:指定放入session域中对象的字节码
 
以下代码实现将修改后的 stu 存在 session 中,在页面通过 EL 表达式就可以调用
 

用 types 属性也能实现,但一般不用,麻烦易出错

 

 
 
 

SpringMVC(二)--处理数据模型、ModelAndView、Model、Map、重定向、@ModelAttribute、的更多相关文章

  1. SpringMVC ModelAndView、Map、Model、ModelMap

    目标方法返回值可以是ModelAndView .Map.Model.ModelMap类型,但最根本还都是ModelAndView. 其中可以包含试图和模型信息. SpringMVC 会把ModelAn ...

  2. SpringMVC(十):SpringMVC 处理输出模型数据之Map及Model

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

  3. Java SpringMVC框架学习(二)httpServeltRequest和Model传值的区别

    HttpServletRequest 为什么大多程序在controller中给jsp传值时使用model.addAttribute()而不使用httpServeletRequest.setAttrib ...

  4. SpingMVC ModelAndView, Model,Control以及参数传递

    1.web.xml 配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class& ...

  5. SpingMVC ModelAndView, Model,Control以及参数传递总结

    1.web.xml 配置: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <servlet>     <servlet-name>dispatcher& ...

  6. model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转;解决的方法是用responsewrite(普通的字符响应)

    model,map,MapAndVivew用于页面跳转时候使用的即跳转后才添加属性 这样再回调中无法使用 因为回调的前提是页面不调转:解决的方法是用responsewrite

  7. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

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

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

  9. 010 处理模型数据(ModelAndView,Map Model,@SessionAttributes)

    1.处理数据模型 SpringMVC提供了几种途径出书模型数据 二:ModelAndView 1.介绍 2.index <%@ page language="java" co ...

  10. 5、处理模型数据ModelAndView、Map、Model以及@SessionAttributes注解

    Spring MVC提供了以下几种途径输出模型数据 —— ModelAndView: 处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据.数据会添加到request域中. ...

随机推荐

  1. css3变换,过度,动画实现梦幻网页

    html和css3一出,整个互联网设计发生了颠覆性的改变,各大IT企业也推出了很多新颖的设计,比如百度浏览器的下载首页,fullpage设计风格加css动画让网页看起来很流畅舒服. css3的变换有3 ...

  2. sqlserver的触发器练习实例

    触发器的概念:它是由事件驱动的,就像java中的监听,当某个事件发生了,就会做一些工作. 下面直接上干货,创建insert触发器.delete触发器.DDL触发器和如何查看触发器定义 1.创建三个表学 ...

  3. NOIP模拟:切蛋糕(数学欧拉函数)

    题目描述  BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段 ...

  4. Spring mybatis源码篇章-SqlSessionFactoryBean

    前言:通过实例结合源码的方式解读,其中涉及到的文件来自于博主的Github毕设项目SchoolActivity_WxServer,引用的jar包为mybatis-spring-1.3.0.jar Sp ...

  5. div+css命名规范大全

    网页制作中规范使用DIV+CSS命名规则,可以改善优化功效特别是团队合作时候可以提供合作制作效率, 我们开发DIV+CSS网页(Xhtml)时候,比较困惑和纠结的事就是CSS命名,特别是新手不知道什么 ...

  6. Docker学习--->>Docker的认识,安装,及常用命令熟悉

    Docker是什么? 在平常的软件开发中,会面临着开发不同的程序或服务需要不同的环境.而在该环境上开发完成后,想要在其他的环境上部署,则需要自己去重新部署,而Docker的出现使得这样的迁移变得容易. ...

  7. java对Microsoft Document的操作--->对Excel的操作

    起初,自己想对网站上爬取一些数据来写到Excel表格中,便在网上找了找java操作Excel接口,了解到Apache的POI接口可以对微软的文档进行操作,WIKI搜索的结果如下, HSSF - 提供读 ...

  8. 移动端https抓包那些事--进阶篇

    上一次和大家介绍了手机端https抓包的初级篇,即在手机未root或者未越狱的情况下如何抓取https流量,但是当时分析应用时会发现,好多应用的https的流量还是无法抓取到,这是为什么呢? 主要原因 ...

  9. Struts2框架入门

    1.1 Struts2概述: 是一个遵循WEB层规范的MVC设实现,该框架基本上借鉴了WebWork框架的体系结构,只吸收了少部分Struts1的优点.是目前JAVA EE项目中WEB层事实上的工业标 ...

  10. RabbitMQ入门与使用篇

    介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀 ...