2012-03-05 52 views
1

我有一個JSF 2.0應用範圍的託管bean(應用#1)已經被點擊了管理會話範圍的bean,做一些業務邏輯如驗證等繼續按鈕後,另一種普通的HTML表單頁面顯示給用戶,點擊這個頁面上的提交按鈕將提交表單到不同的應用程序(應用程序#2)。在App#2完成工作之後,用戶將從App#3中看到一個頁面。請注意,所有這些都發生在SAME瀏覽器選項卡中。刪除會議在另一個應用程序

在app#3(其也是JSF 2.0應用程序),我想刪除的應用程序#1的會話作用域bean。我怎麼做?我嘗試了下面的選項,但他們都沒有工作。

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

我對上面的代碼行

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

空越來越空這裏。

+0

究竟是什麼? – Thor 2012-03-05 19:10:46

+0

對不起,如果代碼不清楚,我把一個Sysout在代碼中說if(FacesContext.getCurrentInstance()。getExternalContext()。getSessionMap()。get(「app1Bean」)== null){System.out.println (「app1Bean is null」);}並且此Sysout在控制檯上顯示 – user972391 2012-03-05 19:12:32

+0

這些應用程序是否在服務器上配置爲使用同一個會話?聽起來不像,但也許這對你並不是很明顯,只是要求確定。 – BalusC 2012-03-05 19:15:21

回答

0

默認情況下,它在同一臺服務器上運行多個應用程序做共享同一個會話。但是服務器可以配置爲這樣做。具體怎麼做取決於服務器的版本。詳情請諮詢您的服務器管理員。

如果更改服務器的配置是不是一種選擇,那麼你最好的選擇是存儲那些你存儲在會話中共享數據源的信息(SQL數據庫,例如)來代替。通過這種方式,最後一個應用程序只需刪除或操作數據源中的信息,而不需要再操縱會話範圍。

相關問題