@SessionAttributes 清除Session

spring提供注解@SessionAttributes将Model中的数据同步到HttpSession中。在清除Session中的数据时不能调用HttpSession中的removeAttribute("attributeName")方法,需要调用接口SessionStatus中的setComplete方法。接口SessionStatus的唯一实现是类SimpleSessionStatus,调用setComplete方法将boolean类型的属性complete设置为true。

public class SimpleSessionStatus implements SessionStatus {

private boolean complete = false;

@Override

public void setComplete() {

this.complete = true;

}

@Override

public boolean isComplete() {

return this.complete;

}

}

该类还有一个方法是isComplete将会在ModelFactory中的updateModel方法中调用,updateModel方法用于将@SessionAttributes中列出的model attributes推广到session中。

public void updateModel(NativeWebRequest request, ModelAndViewContainer container) throws Exception {

ModelMap defaultModel = container.getDefaultModel();

if (container.getSessionStatus().isComplete()){

this.sessionAttributesHandler.cleanupAttributes(request);

}

else {

this.sessionAttributesHandler.storeAttributes(request, defaultModel);

}

if (!container.isRequestHandled() && container.getModel() == defaultModel) {

updateBindingResult(request, defaultModel);

}

}

由于之前我们调用了setComplete方法,所以方法会进入if分支调用SessionAttributesHandler的cleanupAttributes方法。该方法用于从session中移除已知的属性

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • 本文包括:1、Listener简介2、Servlet监听器3、监听三个域对象创建和销毁的事件监听器4、监听三个域对...
    廖少少阅读 6,223评论 6 28
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • [1992年版锡伯语小学语文课本第一册第20课] ajige šanyan gūlmahūn tašan be t...
    萨拉苏阅读 316评论 0 0