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

Hir*_*mit 2 session jsf scope invalidation

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

我的问题是:

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

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

    FacesContext.getCurrentInstance().getExternalContext().getSessionMap.put("key",object);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如何在 jsf 中销毁会话

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

Bal*_*usC 5

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

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

  • 第一次引用@SessionScoped@ViewScoped托管 bean。
  • 获取会话ExternalContext#getSession()true第一次通过。
  • ExternalContext#getSessionMap()第一次在会话映射中存储对象。
  • <h:form>当状态保存方法设置为“服务器”时,第一次返回带有 a 的页面。

您可以通过ExternalContext#invalidateSession(). 例如

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

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


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

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


如何在 jsf 中销毁会话

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

也可以看看: