Внедрение ресурсов в UIComponent (иначе здесь работает CDI?) - PullRequest
7 голосов
/ 24 августа 2011

Я пишу (составной) компонент, который должен взаимодействовать с моим DAO.Вот как объявляется часть Java:

@FacesComponent(value="selectLocation")
public class SelectLocation extends UINamingContainer {

Чтобы получить объект DAO, я попробовал аннотацию CDI:

    @Inject private LocationControl lc;

И это не сработало, поэтому я попробовал Facesаннотация:

    @ManagedProperty (value = "@{locationControl}") private LocationControl lc;

В обоих случаях ничего не происходит - после завершения работы конструктора свойство lc становится равным нулю.

Я использую CDI во всех компонентах поддержки, и все работает.Это будет использовать сварку внутри GlassFish 3.1.1.Любые предложения о том, как получить ресурс?

Ответы [ 3 ]

5 голосов
/ 24 августа 2011

Сейчас у меня есть обходной путь, который должен в основном вставить код котельной плиты, который CDI et. и др. должен покончить с. Теперь у меня есть этот метод:

public LocationControl getLocationControl() {
    if (lc != null) return lc;
    FacesContext fc = getFacesContext();
    Object obj = fc.getApplication().evaluateExpressionGet(fc, "#{locationControl}", LocationControl.class);
    if (obj instanceof LocationControl) lc = (LocationControl) obj;
    return lc;
}

Я хотел бы знать, есть ли у кого-нибудь лучшее решение.

2 голосов
/ 04 июня 2013

Есть ли способ выполнить эту работу без обходных путей?

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

<x:someComponent value="#{someBean.someProperty}" />

Оберните, если необходимо, многоразовый файл тегов / составной файл, чтобы сохранить его СУХОЙ:

<my:someComponent />
2 голосов
/ 24 августа 2011

Я не знаю, работает ли он также для компонентов, но с CDI + CODI MyFaces у вас есть @Advanced для отметки, например, Phase-Listeners, которые должны иметь возможность использовать @Inject.Если это не работает, вы можете создать запрос функции в их JIRA.Они довольно быстрые и часто выпускаются.

Или вы используете: MyBean myBean = BeanManagerProvider.getInstance (). GetContextualReference (MyBean.class);вручную.

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