0

問題は次のとおりです。ユーザー セッションをシリアル化する必要があるため、サーバーの再起動後も存在します。

JavaEE と Tomcat 7 を使用すると で問題なく動作しますimplements Serializableが、問題はFacesContext. 実際、サーバーを再起動するとFacesContext.getCurrentInstance()が返されるnullため、メッセージ バンドルにアクセスできません (そのため、mymessage.propertiesはもう見つかりません)。

FacesContextでは、 Tomcat を再起動するときにどのように保持すればよいでしょうか?

4

1 に答える 1

1

FacesContext問題の説明は明確ではありませんが、症状は、現在のインスタンスをどこでもインスタンス変数として取得しようとしていることを示しています。ローカル メソッド スコープで常に現在のインスタンスを取得する必要があります。

だから、あなたは決してやるべきではありません。

private FacesContext context;

public Bean() {
    context = FacesContext.getCurrentInstance();
}

public void someMethod() {
    context...doSomething();
}

ただし、代わりに次のことを行う必要があります。

public void someMethod() {
    FacesContext.getCurrentInstance()...doSomething();
}

それ以外の場合は、Bean を作成した最初の HTTP 要求のインスタンスのみを保持するセッション スコープ Bean の場合です。まさにこの HTTP リクエストは、関連するレスポンスの終わりまでにガベージされ、後続のリクエストでは無効になります。したがって、FacesContextはシリアライズ可能であってはなりません。

于 2012-10-01T11:29:54.113 に答える