【问题标题】:How to clear an object of the session scoped managed bean?如何清除会话范围托管 bean 的对象?
【发布时间】:2013-02-06 14:58:30
【问题描述】:

我正在使用 primefaces 在 JSF 中开发一个基于登录的应用程序。我将记录的用户信息保存在会话范围的 managedbean 中,当他注销时我需要清除这些详细信息,那么如何清除 SessionScoped ManagedBean 对象中的那些详细信息?

【问题讨论】:

    标签: jsf-2 primefaces


    【解决方案1】:

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

    【讨论】:

    • “注销”不是按照定义“会话被破坏”。但是,通常情况恰恰相反。
    • 我不同意。注销通常意味着“会话失效”。这是最佳实践,也是常见模式。不销毁会话会产生安全问题
    • 嗯,当然。如果是这样的话,OP就不会首先问这个问题:)
    • 另外,通常是你陈述中的奇怪词。销毁会话 总是 会销毁 bean(包括用户管理器),但在 注销 时,您 可能 销毁 bean、使会话无效、做其他工作,等等 - 因为它是一个 custom 动作。你所做的输入是什么意思——这就是结果。但是,这确实是一种最佳做法。
    • @BalusC 是的,我认为我自己的经验太多,OP 不够,需要:)
    【解决方案2】:

    您不需要手动清除会话范围的托管 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 的名称。

    希望对你有帮助

    【讨论】:

      【解决方案3】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-26
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2013-12-12
        相关资源
        最近更新 更多