2012-02-22 148 views
0


我想知道如何在JSF2.0中設置和取消設置會話。儘管遵循一些博客和書籍(Core JavaServer Faces-3rd Edition),但我知道使用註釋@SessionScoped我們可以設置任何管理bean在會話中。我有一個loginBean,它是@ManagedBean和SessionScoped聲明的。在右上角,我的網絡有登錄按鈕。 當這個會話被創建(我沒有手動設置它,這就是爲什麼我很困惑),當我被摧毀?它必須通過超時或僅通過單擊註銷按鈕來銷燬。如何在JSF2.0中設置和取消設置

回答

1

JSF使用下面的Servlet API。會話範圍的託管bean基本上被設置爲HttpSession的屬性。每當引用託管bean的EL表達式第一次被評估時,它將被創建和設置。只要會話過期(通過重新啓動客戶端或服務器中的超時),它就會從會話中「移除」或者失效。如果你讓註銷按鈕調用ExternalContext#invalidateSession(),那麼會話將失效。

如果您熟悉基本的Servlet API,那麼您應該已經理解這一切如何工作。有關JSF封面中Servlet的HttpSession作品的深入解釋,請閱讀此答案:How do servlets work? Instantiation, sessions, shared variables and multithreading

+0

okkkk ....這很有趣... 是無效的會議和取消設置會話引用同樣的事情? – 2012-02-23 09:38:10

+0

我這麼認爲。在技​​術上,至少「取消設置會話」這個短語是沒有任何意義的。很可能你的意思是相同的,但你使用了錯誤的術語。 – BalusC 2012-02-23 13:08:39

0

在JSF 2.0我們可以設置總類的ob爲會話等我提到

CLASS_NAME SM;

ExternalContext extContext = FacesContext.getCurrentInstance()。getExternalContext(); extContext.getSessionMap()。put(「給名稱訪問這個屬性」,sm);

Class_name sm =(Class_name)extContext.getSessionMap()。get(「爲訪問此屬性指定名稱」);