我是JSF的新手,我正在进行一些有关范围和HTTP会话生命周期的研究,但是我尚不清楚一件事。
我知道可以使用ExternalContext中的SessionMap存储变量,并且过去可以很好地适合我所需的内容。我也知道,当会话无效时,所有存储在地图上的数据都丢失了。
但是,我不知道的是:刷新页面时,会话无效?
当我不得不将下载请求放在我的Web应用程序中的一个按钮上时,我的问题就会出现。显然,下载请求不能通过Ajax提出,因此必须刷新整个页面。下载保持正常状态,但是在那之后,所有存储在地图上的数据都消失了,包括所有托管豆。用户数据本身并不是我可以存储的那么重要,然后将其再次放在新的会话映射上。但是,托管豆子呢?我应该如何继续?
假设不是webbrowser的行为不当,只有当服务器端代码实际上是通过调用ExternalContext#invalidateSession()
或HttpSession#invalidate()
。
如果您似乎无法将其钉住,请创建一个HttpSessionListener
并在sessionDestroyed()
方法上放置一个调试断点,然后调查启动它的呼叫堆栈以及为什么。