处理模型数据

Posted 1994july

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理模型数据相关的知识,希望对你有一定的参考价值。

来源:广州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异常。 技术图片

如何避免

技术图片

以上是关于处理模型数据的主要内容,如果未能解决你的问题,请参考以下文章

Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

使用片段时 Intellij 无法正确识别 Thymeleaf 模型变量

php 一个自定义的try..catch包装器代码片段,用于执行模型函数,使其成为一个单行函数调用

如何防止在背面片段导航上再次设置视图模型

干货通俗理解自然语言处理中N-Gram模型

超全超香,数据分析与数据挖掘最频繁使用代码合集来了