一、@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")
- <span style="color: #008000;">@SessionAttributes("currUser") //①将ModelMap中属性名为currUser的属性
- //放到Session属性列表中,以便这个属性可以跨请求访问</span>
- 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); <span style="color: #008000;">//②向ModelMap中添加一个属性</span>
- 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
- <span style="color: #008000;">@SessionAttributes("currentUser")</span>
- public class GreetingController{
- @RequestMapping
- public void hello<span style="color: #008000;">(@ModelAttribute("currentUser")</span> User user){
- //user.sayHello()
- }
- }
相关推荐
在Spring MVC中,`@SessionAttributes`是一个非常实用的注解,它允许我们将ModelMap中的特定属性持久化到HTTP Session中,以便在多个请求之间共享数据。这在处理需要跨请求保持状态的情况时非常有用,比如用户登录...
在Spring MVC框架中,ModelAndView、Model、Map以及@SessionAttributes是四个关键概念,它们在处理请求、数据传输和会话管理中起着至关重要的作用。让我们深入探讨这些概念及其在实际开发中的应用场景。 首先,`...
在Spring MVC框架中,`@SessionAttributes`是一个非常重要的注解,它允许开发者将特定的模型数据持久化到HTTP会话(session)中,以便在多个请求之间共享这些数据。通常,模型数据在请求完成后就会从内存中清除,但...
在Spring MVC框架中,模型数据的处理是核心功能之一,它允许开发者将处理结果传递给视图层进行渲染。在通常情况下,模型数据是通过`ModelAndView`、`Map`或者`Model`接口来存储,并在请求之间进行传递。然而,如果...
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...
### Spring注解开发详解 随着软件工程的发展与技术演进,传统的XML配置方式逐渐显得冗余且不便于维护。为了简化开发流程并提高程序的可读性和可维护性,Spring框架自2.5版本起引入了注解驱动的配置方式。这种基于...
Spring框架的注解是其核心特性之一,极大地简化了Java应用程序的开发,特别是对于依赖注入和Web MVC。本文将深入探讨Spring中常见的注解及其应用。 1. **@Controller**:此注解用于标记一个类作为Spring MVC的控制...
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...
当在网页填写表单信息过多的时候,一般会采用向导式的分页填写...该例子前端是easyui+Jsp实现,后台是采用了spirng @SessionAttributes(替代新版本spring不支持AbstractWizardFormController)这个注解实现表单控制器
Spring 3.0 MVC 注解是Spring框架中用于简化Web应用开发的重要特性,特别是在处理HTTP请求和响应方面。这些注解允许开发者以声明式的方式定义控制器、方法映射以及数据绑定等行为,极大地提高了代码的可读性和可维护...
### Spring注解详解 #### 1.1 Spring注解说明 Spring框架通过引入注解,极大地简化了Java开发中的配置工作,使得开发者能够更加专注于业务逻辑的编写。Spring注解主要应用于依赖注入、控制器定义、事务管理、缓存...
除了上述的注解,Spring MVC还有许多其他注解,如`@SessionAttributes`用于在session中存储模型数据,`@ExceptionHandler`用于全局异常处理,`@InitBinder`用于初始化数据绑定行为,等等。这些注解共同构建了一个...
在 Spring MVC 中,注解扮演着非常重要的角色,它们使得代码更加简洁、易读,并减少了 XML 配置。下面将详细讲解 Spring MVC 中常用的注解。 1. `@Controller`:这个注解标记一个类作为 Spring MVC 的控制器。控制...
这种零配置或少配置的方式,提高了开发效率,降低了学习曲线,使得 Spring MVC 成为了现代 Java Web 开发的首选框架之一。随着 Spring 框架的不断迭代和增强,Spring MVC 的注解功能也会越来越丰富,为开发者提供更...
以上只是Spring MVC注解驱动开发的一部分知识点,实际应用中还有许多其他注解和配置,如`@RestController`、`@SessionAttributes`、`@Async`等,以及AOP(面向切面编程)、Spring Data JPA等集成技术。学习和熟练...
7. **@SessionAttributes**:这个注解用于将特定的模型属性存储在 HTTP Session 中,以便跨多个请求共享数据。 通过这些注解,Spring MVC 提供了一种简洁且可读性强的配置方式,使得开发者能够更加专注于业务逻辑,...
Spring 2.5引入了对注解的强大支持,这些注解在Spring 3.0之后仍然通用,极大地简化了配置并增强了代码的可读性。本文将详细介绍Spring中的一些核心注解及其用法。 首先,要使注解生效,我们需要在Spring配置中注册...
### Spring2.5与3.0注解详解 在探讨Spring框架中注解的应用之前,我们首先需要理解注解在Java编程语言中的基础概念。注解是Java SE 5引入的一种元数据机制,用于在代码中嵌入元数据,而Spring框架充分利用了这一...
在Spring MVC中,注解的使用极大地简化了配置,使得开发更加高效和简洁。下面我们将深入探讨Spring MVC中的一些关键注解及其用法。 1. `@Controller`:这个注解用于标记一个类作为Spring MVC的控制器。控制器类负责...