>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring:Java Web开发技术详解》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 19369 个阅读者 刷新本主题
 * 贴子主题:  @SessionAttribute和@SessionAttributes的区别 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2024-04-30 09:39:43     消息  查看  搜索  好友  邮件  复制  引用

@SessionAttributes 和 @SessionAttribute的区别
Spring MVC中有两个长得非常像的注解:@SessionAttributes 和 @SessionAttribute。
我们先看下@SessionAttributes的定义:
@SessionAttributes用于在请求之间的HTTP Servlet会话中存储model属性。 它是类型级别的注解,用于声明特定控制器使用的会话属性。 这通常列出应透明地存储在会话中以供后续访问请求的模型属性的名称或模型属性的类型。
举个例子:
@SessionAttributes("user")
public class LoginController {

@ModelAttribute("user")
public User setUpUserForm() {
return new User();
}
}
我们可以看到@SessionAttributes是类注解,他用来在session中存储model。 如上面的例子,我们定义了一个名为“User”的model并把它存储在Session中。
我们再看一下@SessionAttribute的定义:
如果您需要访问全局存在(例如,在控制器外部(例如,通过过滤器)管理)并且可能存在或可能不存在的预先存在的会话属性,则可以在方法参数上使用@SessionAttribute注释,例如 以下示例显示:
@Controller
@RequestMapping("/user")
public class UserController {

   /*
    * Get user from session attribute
    */
   @GetMapping("/info")
   public String userInfo(@SessionAttribute("user") User user) {

      System.out.println("Email: " + user.getEmail());
      System.out.println("First Name: " + user.getFname());

      return "user";
   }
}
@SessionAttribute只是获取存储在session中的属性。如果要设置(添加删除)session的属性,则要考虑将org.springframework.web.context.request.WebRequest或javax.servlet.http.HttpSession注入到控制器方法中。
@SessionAttributes中绑定的model可以通过如下几个途径获取:
在视图中通过request.getAttribute或session.getAttribute获取
在后面请求返回的视图中通过session.getAttribute或者从model中获取
自动将参数设置到后面请求所对应处理器的Model类型参数或者有@ModelAttribute注释的参数里面。
@SessionAttributes用户后可以调用SessionStatus.setComplete来清除,这个方法只是清除SessionAttribute里的参数,而不会应用Session中的参数。
@Controller
@SessionAttributes("pet")
public class EditPetForm {

    // ...

    @PostMapping("/pets/{id}")
    public String handle(Pet pet, BindingResult errors, SessionStatus status) {
        if (errors.hasErrors) {
            // ...
        }
            status.setComplete();
            // ...
        }
    }
}
总结一下:
@SessionAttributes 是将model设置到session中去。
@SessionAttribute 是从session获取之前设置到session中的数据。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->数组
  JavaWeb开发-->访问数据库(Ⅰ)
  JSP与Hibernate开发-->Spring、JPA与Hibernate的整合
  Java网络编程-->安全网络通信
  精通Spring-->通过Vuex进行状态管理
  Vue3开发-->绑定CSS样式
  MessagePack反序列化使用示例
  一篇文章让你彻底了解什么叫Netty!
  教你手撸一个Spring框架,从Spring.xml解析到注册Bean对象!
  从零开始手写 spring ioc 框架,深入学习 spring 源码
  RocketMQ-Spring 为什么能成为 Spring 生态中最受欢迎的
  Rust学习笔记 | 异步代码的几种写法
  Mybatis Plus 多租户架构(Multi-tenancy)实现
  几种常见的MAVEN仓库地址
  Spring MVC中Controller的用法
  Redis solr一二事 - 在spring中使用jedis 连接调试单机redi...
  聊聊Spring Cloud版本的那些事儿
  带你逆袭kafka之路
  Spring @Transactional注解失效解决方案
  再谈响应式流(结合制奶厂业务的案例)
  springboot —— 多数据源
  更多...
 IPIP: 已设置保密
树形列表:   
"善于选择要点就意味着节约时间,而不得要领的... hanababy 2024-04-30 09:39:43
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。