如何在JSF管理的Bean中创建、访问和销毁会话?

4

目前,我正在为一个在线购物车创建一个 web 应用程序,并且我需要在每个 JSF 页面上维护会话。

我的问题是:

  1. How can I create and destroy session in managed bean

  2. How can I access value stored in session variable? Like this?

    FacesContext.getCurrentInstance().getExternalContext().getSessionMap.put("key",object);
    
  3. How can I destroy a session in jsf

我需要使用 session.invalidate() 来销毁会话,但是我失败了!!

你遇到了什么样的错误? - Elias Dorneles
你问如何访问存储在会话映射中的值是什么意思?你知道方法getSessionMap()返回一个Map,然后你可以使用put("key", object)将对象放入其中,对吧?之后你就可以使用get("key")获取这个对象了。 - Elias Dorneles
1个回答

7
我该如何在托管的bean中创建和销毁会话?
您不需要自己创建会话。Servlet容器会根据需要自动为您创建会话。换句话说,每当您(或JSF)需要在会话范围内设置一个对象时,servlet容器将自动创建会话。在JSF Web应用程序中,这将发生在以下情况下:
  • 第一次引用@SessionScoped或@ViewScoped托管的bean。
  • 首次使用ExternalContext#getSession(),第一次传递true来获取会话。
  • 首次通过ExternalContext#getSessionMap()将对象存储在会话映射中。
  • 在状态保存方法设置为“server”的情况下,首次返回具有的页面。
您可以通过ExternalContext#invalidateSession()销毁会话。例如:
public String logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    return "login?faces-redirect=true";
}

记得发送重定向,因为会话对象仍然可在当前请求的响应中使用,但在下一个请求中不再可用。

如何访问存储在会话变量中的值?

将其作为 @SessionScoped 托管 bean 的属性即可。或者,您也可以手动操作 ExternalContext#getSessionMap()


如何销毁 jsf 中的会话?

这已经在第一个问题中回答了。

另请参阅:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接