我在@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>
答案 0 :(得分:4)
在托管bean中
public void logout() {
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
}
另请参阅this回答
第二部分
不,没有注释。但您可以随时添加到您的链接"/home.xhtml?faces-redirect=true"
。
对于表演 - 它总是取决于你想要的。如果它只是一个只加载一次的页面(如某些报告或其他东西),那么使用RequestScoped bean(它只能按一个请求生存)。
只要用户停留在同一个视图上,ViewScoped就会存在,所以让我们说带有动态表的页面正在进行ajax调用。
SessionScoped bean可以在整个会话中使用,所以拿着购物车或其他东西都很好。