我正在使用SessionScoped
对象来保存网站的当前用户。我想知道如何在导航时单击一个按钮来销毁此对象。
注意我正在使用CDI
进行注入,并且我正在注入一个包含用户名和登录名的简单bean对象User
。
答案 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