2011-08-06 11 views
6

私は、@ApplicationScopedのBeanは、ELを使用しているページで最初にアクセスされたときにのみ起動されるようです。JSF2 ApplicationScope beanのインスタンス化時間?

ApplicationMapを照会すると、@ApplicationScoped Beanが作成されますか?

ExternalContext ec = currentInstance.getExternalContext(); result = 
    ec.getApplicationMap().get(beanName); 

XHTMLページがロードされる前に、他にどのようにアプリケーションスコープBeanのインスタンス化をトリガーできますか?

答えて

9

@ManagedBean宣言でeager=trueを使用できます。

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

    // ... 

} 

この方法では、Beanはwebappの起動時に自動作成されます。

代わりに、Application#evaluateExpressionGet()を使用してプログラムでELを評価し、必要に応じてBeanを自動作成することもできます。 this answerの例も参照してください。

FacesContext context = FacesContext.getCurrentInstance(); 
Confic config = (Config) context.getApplication().evaluateExpressionGet(context, "#{config}", Config.class); 
// ... 

また、単にあなたがそれを必要と豆の@ManagedPropertyとしてそれを注入できます。

@ManagedBean 
@RequestScoped 
public class Register { 

    @ManagedProperty("#{config}") 
    private Config config; 

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

    // ... 
} 

JSFは親Beanに注入する前に自動的に作成します。 @PostConstructを超えるすべての方法で利用できます。

関連する問題