2011-08-06 3 views
6

@ApplicationScoped 콩은 EL을 사용하는 페이지에서 처음 액세스 할 때만 시작됩니다.JSF2 ApplicationScope bean 인스턴스화 시간?

ApplicationMap을 쿼리 할 때 @ApplicationScoped 콩을 만들지 않습니까?

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 이상의 모든 방법에서 사용할 수 있습니다.