1

ページ スコープの Seam コンポーネントがあり、以下に示すように @Destroy アノテーションが付けられたパラメーターなしの void メソッドがあります。私の問題は、ブラウザーのページが変更された (つまり、ページのスコープが終了した) 場合でも、destroy メソッドが呼び出されないことです。

@Name("myPageBean")
@Scope(ScopeType.PAGE)
public class MyPageBean {

    @Destroy
    public void destroy {
        // Code runs when the component is destroyed.
    }

}

この問題について何か考えはありますか?

前もって感謝します。

4

2 に答える 2

1

ページ コンテキストはいつ破棄されますか?

ページ スコープは、UI コンポーネント ツリーと区別がつきません。したがって、JSF がセッションから UI コンポーネント ツリー (ビューとも呼ばれます) を削除すると、ページ コンテキストが破棄されます。ただし、これが発生した場合、Seam はコールバックを受信しないため、ページスコープのコンポーネントで @Destroy メソッドが呼び出されることはありません。ユーザーがクリックしてページから離れたり、ブラウザを閉じたりすると、ページ コンテキストは JSF にクリーンアップされるまで待機する必要があり、それがバインドされているビューを強制終了します。これは通常、セッションが終了したとき、またはセッションのビュー数が制限を超えた場合に発生します。この制限は、Sun 実装の com.sun.faces.numberOfViewsInSession および com.sun.faces.numberOfLogicalViews コンテキスト パラメータを使用して確立されます。どちらもデフォルトで 15 です。ただし、一般的には、これらの値をいじらないことが最善です。

ページ スコープは、UI コンポーネントの整合性を維持する手段として、ビューに関連付けられたデータを保持するための手段と見なす必要があります。この焦点は、歴史的に問題があったデータ テーブルに特に関連しています。ユース ケースやワークフロー データの一般的なストレージ メカニズムとしてページ スコープを使用することはありません。キャッシュと考えるのが良い方法です。

http://www.seamframework.org/42514.lace

于 2014-01-25T13:05:12.873 に答える
0

この Bean をページで使用したことがありますか? そうでない場合は、作成されないため、破棄が呼び出されないと思います。または @StartUp を追加して、Scope の初期化時に Bean を強制的に作成することもできます。

于 2011-04-19T09:58:26.723 に答える