码迷,mamicode.com
首页 > 其他好文 > 详细

处理模型数据

时间:2019-12-22 00:44:29      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:value   入参   值类型   oom   tps   模型   方法   org   obj   

来源:广州SEO

  • SpringMVC提供了以下几种途径输出模型数据:
    • ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据。
    • MapModel:当入参为org.springframework.ui.Modelorg.springframework.ui.ModelMapjava.uti.Map时。在处理方法返回时,Map中的数据会自动添加到模型中。
    • @ModelAttribute:方法入参标注该注解后,入参的对象就会放到数据模型中。
    • @SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性。

ModelAndView

  • 控制器处理方法的返回值如果为ModelAndView时,则其既包含视图信息,也包含模型数据信息。
  • 添加模型数据:
    • MoelAndView addObject(String attributeName, Object attributeValue)
    • ModelAndView addAllObject(Map<String, ?> modelMap)
  • 设置视图:
    • void setView(View view)
    • void setViewName(String viewName)

Map及Model

  • SpringMVC在内部使用了一个org.springframework.ui.Model接口存储模型数据。
  • 具体步骤:
    • Spring MVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
    • 如果方法的入参为MapModel类型,SpringMVC会将隐含模型的引用传递给这些入参。在方法体内,开发者可通过这个入参对象访问到模型中的所有数据,也可向模型中添加新的属性数据。 技术图片

示例

技术图片

@ModelAttribute

  • 在方法定义上使用@ModelAttribute注解,SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute注解的方法。
  • 在方法的入参前使用@ModelAttribute注解:
    • 可从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参。
    • 将方法入参对象添加到模型中。

@SessionAttributes

  • 若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注一个 @SessionAttributes,SpringMVC将在模型中对应的属性暂存到HttpSession中。
  • @SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可通过模型属性的对象类型指定哪些模型属性需要放到会话中。
  • @SessionAttributes(types=User.class)会将隐含模型中所有类型为User.class的属性添加到会话中。
    • @SessionAttributes(value={"user1","user2"})
    • @SessionAttributes(types={User.class,Dept.class})
    • @SessionAttributes(value={"user1", "user2"},types={Dept.class})

示例

技术图片 技术图片 技术图片

由@SessionAttributes引发的异常

org.springframework.web.HttpSessionRequiredException:
Session attribute ‘user‘ required - not found in session
  • 如果在处理类定义处标注了@SessionAttributes("xxx"),则尝试从会话中获取该属性,并将其赋给该入参,然后再用请求消息填充该入参对象。如果在会话中找不到对应的属性,则抛出HttpSessionRequiredException异常。 技术图片

如何避免

技术图片

处理模型数据

标签:value   入参   值类型   oom   tps   模型   方法   org   obj   

原文地址:https://www.cnblogs.com/1994july/p/12078768.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!