3

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

我的问题是:

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

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

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

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

4

1 回答 1

6

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

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

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

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

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

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


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

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


如何在 jsf 中销毁会话

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

也可以看看:

于 2013-01-07T01:08:50.597 回答