如何在会话销毁(使用客户端保存)后保存viewscoped beans/viewmap



我使用的是带有客户端状态保存的Myfaces 2.2。我看到ViewScoped beans&存储在viewmap中的数据在用户会话被破坏后丢失。我开始知道,不确定这是否正确,这是预期的行为,但在会话销毁后,如何避免查看过期的异常?

我的问题是,在一段不活动的时间后(比如20分钟后),我会很快销毁用户会话,但我希望viewscope数据在那之后仍然存在(当使用客户端保存时),这样当用户在会话销毁后回来时,他就不需要刷新页面了。我不知道为什么&这是如何实现的,但用户可能正忙于阅读网站的某个部分或离开20分钟是非常正常的;当他回来时&与打开的页面交互,如果没有状态,我该如何使其工作?我认为这是任何公共网站的常见要求。

如果我使用客户端状态保存(因为我的页面仍然可以工作),我认为内部使用的jsf视图状态并没有丢失,但为什么那些视图范围的bean也被序列化为视图状态的页面呢。

如果这是设计的行为,有什么方法可以使视图范围的数据在会话到期后仍然有效吗?

我从myfaces用户邮件列表中得到的答案:

viewRoot.getAttributes()映射可以用于即使在会话破坏之后也保持视图范围的值。因此,不是将值存储到viewRoot.getViewMap(),而是存储在viewRoot.getAttributes()返回的映射中。但是,应该注意确保存储的值是可序列化的。

最新更新