2012-05-30 204 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