3

FacesServlet の開始時にいくつかのコードを実行する必要がありますが、FacesServlet が final と宣言されているため、それを拡張して init() メソッドを上書きすることはできません。

特に、休止状態がデータモデルを削除して作成した後、開発およびテスト中にデータベースにデータを書き込みたいと考えています。

Faces-config.xml などでメソッドを実行するように Faces を構成する方法はありますか? それとも、初期化を行うシングルトン Bean を作成するのが最善ですか?

4

3 に答える 3

7

積極的に初期化された アプリケーション スコープの マネージド Beanを使用します。

@ManagedBean(eager=true)
@ApplicationScoped
public class App {

    @PostConstruct
    public void startup() {
        // ...
    }

    @PreDestroy
    public void shutdown() {
        // ...
    }

}

(クラス名とメソッド名は実際には問題ではありません。自由に選択できます。すべては注釈に関するものです)

これはの起動に構築されることが保証されているFacesServletため、FacesContextは必要なときにいつでも使用できます。ServletContextListenerこれは、他の回答で示唆されているものとは対照的です。

于 2012-11-14T12:17:49.407 に答える
0

Web アプリケーションの開始時に通知される独自のServletContextListenerを実装できます。これは管理されたコンテナであるため、リソースを注入できます。やりたいことは何でもできます。もう 1 つのオプションは、@Startup で @Singleton ejb を作成し、その @PostCreate メソッドで作業を行うことです。通常、ServletContextListener は正常に動作しますが、ear 内に複数の Web アプリケーションがあり、それらがすべて同じ永続コンテキストを共有している場合は、@Singleton Bean の使用を検討してください。

于 2012-11-14T11:53:09.873 に答える
0

ここでいくつかの側面を使用したい場合があります。前に実行するように設定するだけです

     void   init(ServletConfig servletConfig) 
      //Acquire the factory instances we will 

//ここから

多分これはあなたを助けるでしょう。

于 2012-11-14T11:57:04.467 に答える