在另一个应用程序中删除会话范围的托管bean

时间:2012-03-05 19:01:35

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

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

在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");

这里也是空的。

1 个答案:

答案 0 :(得分:0)

默认情况下,在同一服务器上运行的多个应用程序共享同一会话。但是,服务器可以配置为执行此操作。具体取决于服务器make / version。有关详细信息,请咨询服务器管理员。

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