如何在JSF托管bean中创建,访问和销毁会话?

时间:2013-01-06 16:28:36

标签: jsf session scope invalidation

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

我的问题是:

  1. 如何在托管bean中创建和销毁会话

  2. 如何访问存储在会话变量中的值?像这样?

    FacesContext.getCurrentInstance().getExternalContext().getSessionMap.put("key",object);
    
  3. 如何在jsf

  4. 中销毁会话

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

1 个答案:

答案 0 :(得分:4)

  

如何在托管bean中创建和销毁会话

您无需自行创建。 servletcontainer将根据需要自动为您执行此操作。换句话说,每当您(或JSF)需要在会话范围中设置对象时,servletcontainer将自动创建会话。在JSF Web应用程序中,这将在您

时发生
  • 第一次引用@SessionScoped@ViewScoped托管bean。
  • ExternalContext#getSession()获取会话,第一次通过true
  • 首次按ExternalContext#getSessionMap()将对象存储在会话地图中。
  • 首次使用<h:form>返回页面,同时将状态保存方法设置为“server”。

您可以ExternalContext#invalidateSession()销毁会话。 E.g。

public String logout() {
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
    return "login?faces-redirect=true";
}

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


  

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

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


  

如何在jsf

中销毁会话

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

另见:

相关问题