2011-08-06 29 views
6

在我看來,@ApplicationScoped bean僅在第一次使用EL在頁面中訪問時啓動。JSF2 ApplicationScope bean實例化時間?

當我查詢ApplicationMap時,會創建@ApplicationScoped bean嗎?

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

我還能怎樣觸發應用的實例範圍的bean的XHTML頁面已經被加載之前?

回答

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); 
// ... 

您也可以將它注入爲您需要它的bean的@ManagedProperty。在父bean注入之前

@ManagedBean 
@RequestScoped 
public class Register { 

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

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

    // ... 
} 

JSF將自動創建它。它可用於除@PostConstruct以外的所有方法。

相關問題