【问题标题】:Remove session scoped managed bean in another application在另一个应用程序中删除会话范围的托管 bean
【发布时间】:2012-03-05 19:01:34
【问题描述】:

我有一个 JSF 2.0 应用程序(App#1),它有一个托管的 Session Scoped bean,它执行一些业务逻辑,如验证等。单击 Continue 按钮后,另一个纯 html 表单页面显示给用户并单击此页面上的提交按钮会将表单提交到不同的应用程序(App#2)。在 App#2 完成工作后,会向用户显示来自 App#3 的页面。请注意,所有这些都发生在相同的浏览器选项卡中。

在 App#3(它也是一个 JSF 2.0 应用程序)中,我想删除 App#1 的会话范围 bean。我怎么做?我尝试了以下选项,但它们似乎都不起作用。

//First approach
FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("app1Bean");

上面的代码行我得到 null

//second approach
HttpSession session = (HttpSession) FacesContext.getCurrentInstance()
        .getExternalContext().getSession(true);
session.removeAttribute("app1Bean");

这里也为空。

【问题讨论】:

  • 对不起,如果代码不清楚,我在代码中放了一个 Sysout 说 if(FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("app1Bean") == null ) { System.out.println("app1Bean is null");} 这个 Sysout 出现在控制台上
  • 这些应用程序是否在服务器上配置为使用相同的会话?听起来不是,但也许对你来说不是很明显,只是想确定一下。
  • 我几乎可以肯定没有设置此类设置(Websphere 7.0)。这是实现我想要的唯一方法吗?

标签: jsf-2 form-submit managed-bean session-scope


【解决方案1】:

默认情况下,在同一台服务器上运行的多个应用程序共享同一个会话。但是,可以将服务器配置为这样做。具体如何做到这一点取决于服务器的品牌/版本。有关详细信息,请咨询您的服务器管理员。

如果不能更改服务器配置,那么最好的办法是将会话中存储的信息存储在共享数据源(例如 SQL 数据库)中。这样,最后一个应用程序只需删除或操作数据源中的信息,您就不需要再摆弄会话范围了。

【讨论】:

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