在JSF管理的bean中侦听用户会话何时结束



是否可以这样做:当用户会话启动时,我从数据库中读取某个integral属性。当用户在该会话中执行某些活动时,我更新该变量(存储在会话中)&当会话结束时,我最终将该值存储到DB中。

我的问题是,如果用户会话已经结束,我如何使用JSF框架来识别&然后我应该将值存储回DB吗?

除了HttpSessionListener之外,您还可以为此使用会话范围的托管bean。您使用@PostConstruct(或只是bean的构造函数)和@PreDestroy注释来挂接会话创建并销毁

@ManagedBean
@SessionScoped
public class SessionManager {
    @PostConstruct
    public void sessionInitialized() {
        // ...
    }
    @PreDestroy
    public void sessionDestroyed() {
        // ...
    }
}

唯一的要求是这个bean在JSF页面中被引用,或者作为任何请求范围bean的@ManagedProperty被引用。否则它将不会被创建。但在您的情况下,这应该没有问题,因为您显然已经在使用会话范围的托管bean,只添加一个@PreDestroy方法就足够了。

我的问题是如何识别使用JSF框架,如果用户会话已经结束&然后我应该存储值返回DB?

JSF框架没有单独的会话概念;它使用Servlet规范的底层会话管理特性。

您必须创建一个HttpSessionListener,它为您提供钩子来捕获会话创建和销毁事件,在那里您可以读取值并将其存储回DB。

HttpSessionListener,或者如果需要依赖项注入进行保存,则可以使用@PostConstruct & @PreDestroy。请记住,当您调用invalidate()或会话超时后,会话将被破坏,而不是当用户关闭浏览器时。为什么要使用会话范围,会话范围可能更适合您。

相关内容

  • 没有找到相关文章

最新更新