我是JSF的新手,我正在做一些关于Scopes和Http会话生命周期的研究,但有一件事我不清楚。
我知道可以使用来自ExternalContext的sessionMap存储变量,并且它曾经非常适合我需要的工作。我也知道,当会话无效时,地图上存储的所有数据都将丢失。
然而,我不知道的是:当页面刷新时,会话无效?
当我不得不从我的网络应用程序的其中一个按钮上下载请求时,出现了我的问题。显然,无法通过Ajax下载请求,因此必须刷新整个页面。下载继续进行,但在此之后,地图上存储的所有数据都将消失,包括所有托管bean。用户数据本身并不重要,因为我可以存储它然后再将它放在新的会话映射上。但是托管豆呢?我该怎么办?
答案 0 :(得分:2)
假设不是网络浏览器行为不端,只有当服务器端代码实际上通过调用ExternalContext#invalidateSession()
或HttpSession#invalidate()
使会话无效时才会发生这种情况。
如果你似乎无法确定它,那么创建一个HttpSessionListener
并在sessionDestroyed()
方法上放置调试断点并调查启动它的调用堆栈及其原因。