2012-04-02 5 views
2

以下に説明するrequestScoped beanが1回のリクエスト中に複数回作成されていることがわかりました。 Beanが再インスタンス化されるたびに、わずかな時間前に、Beanはログごとに破棄されていました。可能性があり、単一の要求のすべての処理の前に破壊されるBeanの理由は、私はこの事は起こらせないの世話をどうやっ&を完了している?何リクエストスコープ付きBeanが1回のリクエスト中に複数回作成/破棄される

@ManagedBean(name="namesDirectory") 
@RequestScoped 
public class NamesDirectory { 

    public static NamesDirectory getCurrentInstance(){ 
     FacesContext context = FacesContext.getCurrentInstance();    
     return context.getApplication().evaluateExpressionGet(context, "#{namesDirectory}", NamesDirectory.class); 
    } 

    @PostConstruct 
    public void foo(){ 
     Easy.log("bean created"); 
    } 

    @PreDestroy 
    public void foo1(){ 
     Easy.log("bean destroyed"); 
    } 

} 


編集:

私は要求が複数回トリガさせた私のFaceletsのコード内のいくつかの場所で <p:graphicImage url="#" />を持っていました。これらを削除した後、私はまだこのリクエストが作成されているのを見ていますが、それ以前には何度も繰り返していました。

実際に私のアプリケーションにログインしようとしているのを見ています。資格情報は、彼らが検証されている&供給された後ので、Beanが&インスタンス化に使用が、それはそれが作成されるので、そのままユーザーが、Beanが再び必要とされているの建物の間に成功したログインページ&に移動したのはこの後です存在しない。これにより、このリクエストスコープ付きBeanが2回作成されます。これは、私が信じているのは単なるリクエストです。

答えて

1

あなたのログインは、おそらく非常に正常ですLocation:ヘッダ、で新しいページにブラウザをリダイレクトしています。したがって、2つのリクエストと2つのリクエストスコープのBeanが必要です。同様に、あなたが気づいたように、リンクされた画像は別のブラウザ要求を引き起こします。これはウェブの仕組みです。それがあまり気になる場合は、別のスコープ(セッション、ログインしているユーザーあたり1つのBeanなど)を使用できますが、タブブラウズには注意してください。

関連する問題