簡體   English   中英

JSF2 ApplicationScope bean實例化時間?

[英]JSF2 ApplicationScope bean instantiation time?

在我看來,@ @ApplicationScoped bean僅在第一次使用EL訪問頁面時啟動。

當我查詢ApplicationMap ,是否會創建@ApplicationScoped bean?

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

如何在加載XHTML頁面之前觸發應用程序作用域bean的實例化?

您可以在@ManagedBean聲明中使用eager=true

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

    // ...

}

這樣bean將在webapp的啟動時自動處理。

除此之外,您還可以使用Application#evaluateExpressionGet()以編程方式評估EL,以便在必要時自動創建bean。 另請參閱此答案的示例。

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

您也可以將它作為您需要它的bean的@ManagedProperty注入。

@ManagedBean
@RequestScoped
public class Register {

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

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

    // ...
}

在注入父bean之前,JSF將自動創建它。 它可以在@PostConstruct之外的所有方法中使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM