在JSF托管bean中结束用户会话的时间

Raj*_*pta 5 session jsf listener managed-bean

是否可以执行以下操作:当用户会话启动时,我从数据库中读取某个完整属性.当用户在此会话中执行某些活动时,我更新该变量(存储在会话中)并在会话结束时,然后我最终将该值存储到数据库中.

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

Bal*_*usC 9

除此之外HttpSessionListener,您还可以使用会话作用域托管bean.您使用@PostConstruct(或只是bean的构造函数)和@PreDestroy注释来挂钩会话创建和销毁

@ManagedBean
@SessionScoped
public class SessionManager {

    @PostConstruct
    public void sessionInitialized() {
        // ...
    }

    @PreDestroy
    public void sessionDestroyed() {
        // ...
    }

}
Run Code Online (Sandbox Code Playgroud)

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


Vin*_*lds 5

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

JSF框架没有单独的会话概念; 它使用Servlet规范的底层会话管理功能.

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