1

多くの管理対象 Bean が@SessionScopedあり、ユーザーがログアウトしたときにセッション全体をクリアしたいと考えています。これを達成する方法を知っている人はいますか?そして、どちらが最高のパフォーマンスを発揮しますか:@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

1 に答える 1

4

マネージド Bean で

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

この回答も参照してください

第二部

いいえ、これに対する注釈はありません。ただし、いつでもリンクに追加できます"/home.xhtml?faces-redirect=true"

そして、パフォーマンスについては、常にあなたが望むものに依存します. 1回だけロードされるページ(レポートなど)の場合は、RequestScoped Beanを使用します(1つのリクエストごとにのみ存続します)。

ViewScoped は、ユーザーが同じビューにとどまっている限り存続するため、ajax 呼び出しを行っている動的テーブルを含むページに適しています。

また、SessionScoped Bean はセッション全体で動作するため、ショッピング カートなどを保持するのに適しています。

于 2012-05-30T12:20:57.790 に答える