【问题标题】:Where do model attributes get stored?模型属性存储在哪里?
【发布时间】:2014-01-26 19:16:05
【问题描述】:

我搜索了很多,但找不到答案。

模型对象值存储在Spring 中的位置。

model.addAttributes("key","values") 值的存储位置(例如:会话、请求)。this 的范围是什么?

如何使用 expression language (如 ${key})获取 JSP 中存储值的值?

EL 如何检索model 中存储的值?

【问题讨论】:

标签: java spring jsp spring-mvc servlets


【解决方案1】:

DispatcherServlet 是任何 Spring MVC 应用程序的入口点,它会在每个请求上创建一个新的 ModelAndViewContainer 对象。此类的 javadoc 声明

记录模型和视图相关的决策 HandlerMethodArgumentResolversHandlerMethodReturnValueHandlers 在调用控制器方法的过程中。

这两个接口负责解析您的 @RequestMapping 带注释的方法参数和返回值。

因此,在请求的生命周期中,模型属性存储在此 ModelAndViewContainer 对象的 ModelMap 字段中。实际的当前实现是BindingAwareModelMap

在请求结束时,当需要渲染视图时,一些View 对象会将模型属性与HttpServletRequest 属性合并。

EL 如何检索模型中存储的值?

它没有。 EL 从 JSP 的页面范围内解析属性,HttpServletRequestHttpSessionServletContext

【讨论】:

    【解决方案2】:

    它在请求中,除非用@SessionAttributes 修改。如果你正在做一个重定向——请求属性会丢失;这是一个新的要求。
    对于您的第二个和第三个问题,此链接Where does the Spring Model that is passed to a JSP goes to?

    【讨论】:

    • 模型属性开始时不会存储在请求或会话中。