1

我有一个 JSF 2.0 应用程序(App#1),它有一个托管的 Session Scoped bean,它执行一些业务逻辑,如验证等。单击 Continue 按钮后,向用户显示另一个纯 html 表单页面并单击 Submit 按钮此页面会将表单提交给不同的应用程序(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");

这里也为空。

4

1 回答 1

0

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

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

于 2012-03-05T19:38:12.873 回答