2012-05-30 245 views
1

我在@SessionScoped中有很多託管的bean,我想在用戶註銷時清除整個會話。有誰知道如何做到這一點?哪一個表現最好:@SessionScoped@RequestScoped@ViewScoped?是否有註釋來替換文件faces-config.xml中的重定向?註銷後清除會話

我可以替代由註解如下:

<navigation-rule> 
    <from-view-id>pages/login.xhtml</from-view-id> 
    <navigation-case> 
     <from-outcome>userOK</from-outcome> 
     <to-view-id>pages/template.xhtml</to-view-id> 
     <redirect /> 
    </navigation-case> 
    <navigation-case> 
     <from-outcome>userNOK</from-outcome> 
     <to-view-id>pages/login.xhtml</to-view-id> 
    </navigation-case>  
    </navigation-rule> 

回答

4

在您的託管bean

public void logout() { 
    FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); 
} 

參見this答案

第二部分

不,有沒有註釋。但你可以隨時添加到你的鏈接"/home.xhtml?faces-redirect=true"

而對於表現 - 它總是取決於你想要的。如果它只是一個只加載一次的頁面(比如某些報表或其他東西),那麼使用RequestScoped bean(它只存在於每個請求中)。

只要用戶停留在同一個視圖上,ViewScoped就會一直存在,因此讓我們來說一下使用動態表進行Ajax調用的頁面。

而SessionScoped bean是整個會話的一部分,所以最好能持有購物車或類似的東西。

+0

對於問題的第二部分,是否有任何註釋? – Youssef