`

@SessionAttributes和@ModelAttribute

 
阅读更多

  一、@ModelAttribute

 

 在默认情况下,ModelMap 中的属性作用域是 request 级别是,也就是说,当本次请求结束后,ModelMap 中的属性将销毁。如果希望在多个请求中共享 ModelMap 中的属性,必须将其属性转存到 session 中,这样 ModelMap 的属性才可以被跨请求访问。

 

      Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现的。

 

使模型对象的特定属性具有 Session 范围的作用域

package com.baobaotao.web;

…
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@RequestMapping("/bbtForum.do")
@SessionAttributes("currUser") //①将ModelMap中属性名为currUser的属性
//放到Session属性列表中,以便这个属性可以跨请求访问
public class BbtForumController {
…
    @RequestMapping(params = "method=listBoardTopic")
    public String listBoardTopic(@RequestParam("id")int topicId, User user,
ModelMap model) {
        bbtForumService.getBoardTopics(topicId);
        System.out.println("topicId:" + topicId);
        System.out.println("user:" + user);
        model.addAttribute("currUser",user); //②向ModelMap中添加一个属性
        return "listTopic";
    }

}

    我们在 ② 处添加了一个 ModelMap 属性,其属性名为 currUser,而 ① 处通过 @SessionAttributes 注解将 ModelMap 中名为 currUser 的属性放置到 Session ,所以我们不但可以在 listBoardTopic() 请求所对应的 JSP 视图页面中通过 request.getAttribute(currUser) session.getAttribute(currUser) 获取 user 对象,还可以在下一个请求所对应的 JSP 视图页面中通过 session.getAttribute(currUser) ModelMap#get(currUser) 访问到这个属性。

 

    这里我们仅将一个 ModelMap 的属性放入 Session 中,其实 @SessionAttributes 允许指定多个属性。你可以通过字符串数组的方式指定多个属性,如 @SessionAttributes({attr1,attr2})。此外,@SessionAttributes 还可以通过属性类型指定要 session 化的 ModelMap 属性,如 @SessionAttributes(types = User.class),当然也可以指定多个类,如 @SessionAttributes(types = {User.class,Dept.class}),还可以联合使用属性名和属性类型指定:@SessionAttributes(types = {User.class,Dept.class},value={attr1,attr2})

 

二、@ModelAttribute

 

     我们可以在需要访问 Session 属性的 controller 上加上 @SessionAttributes,然后在 action 需要的 User 参数上加上 @ModelAttribute,并保证两者的属性名称一致。SpringMVC 就会自动将 @SessionAttributes 定义的属性注入到 ModelMap 对象,在 setup action 的参数列表时,去 ModelMap 中取到这样的对象,再添加到参数列表。只要我们不去调用 SessionStatus 的 setComplete() 方法,这个对象就会一直保留在 Session 中,从而实现 Session 信息的共享。

@Controller
@SessionAttributes("currentUser")
public class GreetingController{
@RequestMapping
public void hello(@ModelAttribute("currentUser") User user){
  //user.sayHello()
}
}

 

 

 

 

分享到:
评论

相关推荐

    spring学习之@SessionAttributes实例解析

    通过这种方式,`@SessionAttributes`和`@ModelAttribute`协同工作,使得我们能够方便地在多个请求间共享和恢复数据,而无需手动处理Session管理。这对于提高代码的可读性和减少重复代码是很有帮助的。 总的来说,`@...

    SpringMVC基础—— ModelAttribute和 SessionAttribute.docx

    - **通过注解的value属性和方法返回值**:推荐的做法是通过`@ModelAttribute`的`value`属性指定一个键,并返回对应的对象。这样,Spring MVC会将方法的返回值作为模型中的键值对存储。例如,`@ModelAttribute(...

    SpringMVC-4 处理模型数据

    通过ModelAndView、Map与Model、@SessionAttributes和@ModelAttribute注解来处理模型数据;其中,@ModelAttribute是重点,说明其运行流程并进行代码分析,最终给出SpringMVC目标方法的POJO类型参数的入参全过程,并...

    springMVC接收参数的几种注解.pdf

    5. **@SessionAttributes 和 @ModelAttribute** `@SessionAttributes` 注解用于声明需要在 HTTP 会话中存储的属性,而 `@ModelAttribute` 通常用于从请求参数或会话中创建或更新模型对象。例如: ```java @...

    SpringMVC处理模型数据-2.docx

    ### SpringMVC 处理模型数据详解 #### 模型数据类型 在SpringMVC框架中,模型数据是指从控制器传递到视图层的数据。这些数据可以被用来填充页面,或者进行...而`@ModelAttribute`则为对象的传递和预填充提供了便利。

    [Spring MVC] - ModelAttribute使用.docx

    在Spring MVC框架中,`@ModelAttribute`是一个非常重要的注解,它主要用于数据绑定和模型对象的处理。在本文中,我们将深入探讨`@ModelAttribute`的使用及其在控制器(Controller)中的作用。 首先,`@...

    SpringMVC SessionAttribute 使用说明.docx

    它通常与`@ModelAttribute`配合使用,`@ModelAttribute`注解用于将方法的返回值或参数绑定到模型(Model)中,以便在视图解析时可用。 ### `@ModelAttribute` 的作用 `@ModelAttribute` 有以下两个主要用途: 1. **...

    Spring MVC 3.0实战指南.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 视图解析...

    一个注解解决页面重复提交

    在Java Web开发中,Spring框架提供了`@SessionAttributes`和`@ModelAttribute`注解,可以结合自定义拦截器实现防重复提交。 1. **@SessionAttributes**:这个注解用于将模型属性存储在Session中。当我们处理表单...

    Spring3MVC注解教程.ppt

    访问数据模型:@ModelAttribute 访问数据模型:Map及Model 访问数据模型:@SessionAttributes 一场由@SessionAttributes引发的血案... 如何避免@SessionAttributes引发的血案 目录 Spring MVC如何解析视图 ...

    SpringMVC杂记(三) 向导型Controller的实现(基于SpringMVC 3.1.1)

    SpringMVC 3.1.1版本的源码中,Controller接口和相关注解(如@RequestMapping、@SessionAttributes、@ModelAttribute)的实现提供了上述功能的基础。通过阅读源码,我们可以更深入地理解这些特性的内部工作原理。 ...

    SSM笔记-处理模型数据

    总结来说,ModelAndView、ModelAttribute和SessionAttributes是SpringMVC处理模型数据的关键工具。ModelAndView用于封装模型数据和视图信息;ModelAttribute简化了将请求参数转化为模型对象的过程;而...

    springmvc处理模型数据ModelAndView过程详解

    SpringMVC框架提供了多种方式来处理模型数据,包括使用ModelAndView、Map及Model、@SessionAttributes和ModelAttribute等。下面我们将详细介绍SpringMVC处理模型数据ModelAndView过程。 一、使用ModelAndView处理...

    SpringMVC 常用注解类视频详解

    15. `@ModelAttribute("attrName")`:配合`@SessionAttributes`使用,可以从HttpSession中获取或向其中添加属性。 通过深入理解并熟练运用这些注解,开发者可以有效地构建和维护Spring MVC应用程序,提高开发效率和...

    springMVC接收参数的几种注解.docx

    - `@ModelAttribute` 通常与表单绑定和模型属性结合使用,它可以从请求参数中获取数据并创建一个对象实例,或者将对象添加到模型中。例如: ```java @PostMapping("/submitForm") public String submitForm(@...

    java或Java框架中常用的注解及其作用详解_资料.docx

    - `@ModelAttribute`和`@SessionAttributes`:在Spring MVC中,`@ModelAttribute`用于将请求参数绑定到模型对象,`@SessionAttributes`则用于在HTTP会话中存储模型对象。 - `@PathVariable`:从URL路径中提取参数...

    spring3.0MVC注解(附实例).docx

    它可以应用于类级别和方法级别,分别表示类级别的基本映射和方法级别的精确映射。例如,类级别上定义了一个URL前缀,方法级别上再定义具体的路径,两者结合即可完成完整的URL映射。 2. **@Controller** 注解 - `@...

    SpringMVC Jar 包

    SpringMVC通过@ModelAttribute注解帮助模型和视图间的数据传递。 3. **Controller接口和@RequestMapping**:Controller接口定义了处理请求的方法,而@RequestMapping注解用于指定URL映射,可以基于HTTP方法(GET, ...

    Spring MVC常用注解

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。...学习和熟练掌握这些注解对于理解和使用 Spring MVC 框架至关重要。

    annotation-springMVC.rar_springmvc_springmvc API chm

    1. `@ModelAttribute`:用于绑定请求参数到模型对象。通常与`@RequestMapping`结合使用,将请求参数转化为模型对象。 2. `@SessionAttributes`:用于指定需要存储在HttpSession中的模型属性,可以在多个请求间共享...

Global site tag (gtag.js) - Google Analytics