1

我有许多托管 bean @SessionScoped,我想在用户注销时清除整个会话。有谁知道如何实现这一目标?哪一个表现最好:@SessionScopedor @RequestScopedor @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

1 回答 1

4

在您的托管 bean 中

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

另请参阅答案

第二部分

不,对此没有注释。但是您可以随时添加到您的链接"/home.xhtml?faces-redirect=true"中。

而对于性能 - 它总是取决于你想要什么。如果它只是一个只加载一次的页面(比如一些报告或其他东西),那么使用 RequestScoped bean(它只存在于每个请求中)。

只要用户停留在同一个视图上,ViewScoped 就会一直存在,因此对于我们说具有动态表的页面进行 ajax 调用是很好的。

并且 SessionScoped bean 存在整个会话,因此最好拿着购物车或类似的东西。

于 2012-05-30T12:20:57.790 回答