3

データベースにいくつかのデータをコミットした後、最近コミットされたデータを反映するために、セッション Bean を自動的に更新したいと考えています。JSF 2.0 でマネージド セッション Bean を使用する場合、これをどのように達成するのですか?

現在、セッションをクリアして再度ロードするには、Web サーバーを再起動する必要があります。

4

1 に答える 1

6

2 つの方法:

  1. 代わりに、それらをビュー スコープに入れてください。ビュー固有のデータをセッション全体で保存するのは無駄です。パフォーマンスに懸念がある場合は、接続プーリング、DB レベルのページネーション、および/または永続レイヤーでのキャッシュの実装に集中する必要があります (たとえば、JPA2 は第 2 レベルのキャッシュをサポートしています)。

    @ManagedBean
    @ViewScoped
    public class FooBean {
        // ...
    }
    

  2. load()アクション メソッドから (必要に応じて別の Bean から) 呼び出せるように、パブリック メソッドを追加します。

    @ManagedBean
    @SessionScoped
    public class FooBean {
    
        private List<Foo> foos;
    
        @EJB
        private FooService fooService;
    
        @PostConstruct
        public void load() {
            foos = fooService.list();
        }
    
        // ...
    }
    

    これは、同じ Bean 内のアクション メソッドで呼び出すことができます (もちろん、フォームをまったく同じマネージド Bean に送信する場合)。

        public void submit() {
            fooService.save(foos);
            load();
        }
    

    または別の Bean のアクション メソッドから (マネージド Bean の設計が通常とは少し異なる場合):

        @ManagedProperty("#{fooBean}")
        private FooBean fooBean;
    
        public void submit() {
            fooService.save(foos);
            fooBean.load();
        }
    

    もちろん、これは現在のセッションにのみ影響します。他のセッションにも影響を与えたい場合は、最初の方法で提案されているように、代わりにビュー スコープに配置することを検討する必要があります。

以下も参照してください。

于 2011-10-11T20:35:36.977 に答える