如何销毁SessionScoped bean的Object

时间:2015-11-21 10:17:56

标签: java-ee cdi

我正在使用SessionScoped对象来保存网站的当前用户。我想知道如何在导航时单击一个按钮来销毁此对象。

注意我正在使用CDI进行注入,并且我正在注入一个包含用户名和登录名的简单bean对象User

2 个答案:

答案 0 :(得分:3)

SessionScoped bean的生命周期取决于HTTP会话。如果HTTP会话被破坏(超时或手动会话失效),SessionScoped bean也将被销毁。

来自SessionScoped文档:

  

会话上下文在发生的所有servlet请求之间共享   在同一个HTTP会话中。当会话上下文被破坏时   在所有HttpSessionListeners之后,HTTP会话超时   在invalidate()的任何请求的最后调用   在所有过滤器和ServletRequestListeners之后调用   调用。

如果您使用的是JSF,请尝试:

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

它会使HTTP会话无效,从而破坏与之关联的bean。

答案 1 :(得分:1)

如果你想要销毁你的对象而不需要使Session失效(因为唯一的按钮,那就是会导致会话失效是注销)你可以使用另一个范围,即所谓的会话范围,并且可以手动关闭。登记/> 您可以在此处找到更多信息https://docs.jboss.org/weld/reference/latest/en-US/html/scopescontexts.html#_the_conversation_scope