2

我是 JSF 的新手,我正在做一些关于 Scopes 和 Http 会话生命周期的研究,但我不清楚一件事。

我知道可以使用 ExternalContext 中的 sessionMap 来存储变量,并且它曾经可以很好地满足我的需要。我也知道,当会话无效时,存储在地图上的所有数据都会丢失。

但是,我不知道的是:刷新页面时会话无效?

当我不得不在我的 Web 应用程序中的一个按钮上发出下载请求时,我的问题就出现了。显然无法通过 Ajax 发出下载请求,因此必须刷新整个页面。下载正常进行,但在那之后,地图上存储的所有数据都消失了,包括所有托管的 bean。用户数据本身并不重要,因为我可以存储它,然后将其再次放在新的会话地图上。但是托管 bean 呢?我应该如何进行?

4

1 回答 1

2

假设行为不端的不是网络浏览器,只有当服务器端代码实际上通过调用ExternalContext#invalidateSession()or使会话无效时才会发生这种情况HttpSession#invalidate()

如果您似乎无法确定它,那么创建一个HttpSessionListener并在方法上放置一个调试断点,sessionDestroyed()并调查启动它的调用堆栈以及原因。

于 2012-10-23T15:12:30.330 回答