2

@ViewAccessScoped詳細については、Bean に 2 つのBean と 2 つのページ/ビュー、検索用の 1 つの Bean を持つ JSF アプリがあります。詳細 Bean は @ViewAccessScoped を参照するため、検索に戻るとデータが利用可能になります。他の CDI リファレンスはありません。WindowRenderMode は ですClientWindowRenderMode.CLIENTWINDOW。これ以上の構成はありません。

これはこれまでのところ非常にうまく機能しています。別のページに移動するか、ログアウトすると、Bean のスコープが解除されます。私が経験した 1 つの問題: 新しいブラウザー タブで詳細ページを開くと、2 つの新しい Bean が作成されます。これは予期される動作です。しかし、タブを閉じると、Beans はまだそこにあります。タブが閉じられたときにサーバーに通知されないと思います。

  1. タブ clsoes を検出するために使用できるデルタスパイクに組み込みのソリューションはありますか?
  2. @ViewAccessScoped (Session-Timeout 以外に) の Bean のタイムアウトはありますか?
  3. 組み込みのソリューションがない場合: プログラムで Bean のスコープを解除するにはどうすればよいですか? できれば、そのタブに接続されているすべての Bean のスコープを解除します (= 同じ Window-ID) (JavaScript で自分自身を閉じることを検出し、閉じるときに Bean-Method を呼び出します)
4

1 に答える 1

3
  1. いいえ、JS で「タブを閉じる」イベントをキャッチすることはできないためです。参照: javascript は、ブラウザのタブを閉じる/ブラウザを閉じることを検出します

  2. CODI で利用できましたが、DeltaSpike には移行されませんでした。参照: https://issues.apache.org/jira/browse/DELTASPIKE-437

  3. WindowContext API を介して行うことができます。

    @Inject private org.apache.deltaspike.core.spi.scope.window.WindowContext windowContext;
    
    public void closeIt() {
        windowContext.closeWindow("myWindowId");
    }
    
于 2016-01-25T12:25:30.213 に答える