Время создания объекта JSF2 ApplicationScope? - PullRequest
6 голосов
/ 06 августа 2011

Мне кажется, что @ApplicationScoped bean-компоненты запускаются только при первом обращении к странице с использованием EL.

Когда я запрашиваю ApplicationMap, будет ли создан компонент @ApplicationScoped?

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

Как еще можно вызвать создание экземпляра bean-объекта области действия до загрузки страницы XHTML?

1 Ответ

9 голосов
/ 06 августа 2011

Вы можете использовать eager=true в объявлении @ManagedBean.

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

    // ...

}

Таким образом, бин будет автоматически создан при запуске веб-приложения.

Вместочто вы также можете использовать Application#evaluateExpressionGet() для программной оценки EL и, таким образом, для автоматического создания компонента, если это необходимо.См. Также пример по этому ответу .

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 автоматически создаст его перед внедрением в родительский компонент.Он доступен всеми способами, кроме @PostConstruct.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...