如何清除会话作用域托管bean的对象?

时间:2013-02-21 10:16:00

标签: jsf-2 primefaces

我正在使用primefaces在JSF中开发基于登录的应用程序。在那里我将记录的用户信息保存在会话作用域的managedbean中,我需要在他退出时清除这些细节,那么如何清除SessionScoped ManagedBean对象中的那些细节呢?

3 个答案:

答案 0 :(得分:17)

您需要通过在操作方法中调用以下函数来使当前会话无效:

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

此外,由于会话范围bean在后续请求中被删除,请务必发送重定向:

FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml");

或者,只需从您的方法返回导航案例结果:

return "login.xhtml?faces-redirect=true";

如果您不想使会话无效,并且有效地保留会话范围的bean(在我看来这是一种不好的做法),只需取消所有用户数据(希望在一个会话范围内收集) logout方法中的托管bean)(如果logout方法驻留在另一个会话范围的bean中,您可能需要注入该bean)。

答案 1 :(得分:3)

您无需手动清除会话范围的托管bean。只需清除用户会话即可。 通过在servlet中使用以下代码进行注销。

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    System_Properties system_Properties=new System_Properties();
    PrintWriter out = response.getWriter();
    try {
        request.getSession().invalidate();            
    }finally {
        out.close();
    }
}

如果仍然手动清除托管bean数据,则可以使用以下代码完成。

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null);

其中“mananged_bean_name”是托管bean的名称。

希望有所帮助

答案 2 :(得分:-3)

当用户注销时,会话被销毁,所有SessionScoped ManagedBean对象也被