2015-03-12 2 views
0

Любой компонент CDI, который я вставляю в класс реализации org.primefaces.model.LazyDataModel, получается null. Сам класс реализации ленивой модели представляет собой компонент CDI @Named с областью действия @javax.faces.bean.ViewScoped. Это выглядит следующим образом:Невозможно вставить компонент CDI в Primefaces Класс реализации LazyDataModel

@Named("myLazyModel") 
    @ViewScoped 
    Class MyLazyModel extends LazyDataModel implements Serializable { 

    public MyLazyModel() { 

    } 

    @Inject 
    AnotherCdiBeanClass injectedObj; 

    public AnotherCdiBeanClass getInjectedObj() { 
     return injectedObj; 
    } 

    public AnotherCdiBeanClass setInjectedObj(AnotherCdiBeanClass anotherCdiBeanClassObj) { 
     this.injectedObj = anotherCdiBeanClassObj; 
    } 


    public void someMethod() { 
     getInjectedObj(); // Its NULL, why? 
    } 


} 

я получил предупреждение в затмении из Java при нагнетании в lazymodel класса реализации компонента. Предупреждение было чем-то вроде этого: класс класса lazymodel не может проксироваться контейнером, так как он не содержит конструктора no-arg, не являющегося частным, а компонент не является обычным бобом (что-то в этом роде).

Есть еще одна проблема, в классе реализации LazyDataModel я установил rowCount в размере фактического размера фактического списка данных (размер после фильтрации в сетке). Но после того, как экземпляр класса реализации lazymodel снаружи в некотором CDI-компоненте дает мне rowCount нуля.

new MyLazyModel(actualDataList).getRowCount() -> 0

После отладки я нашел, что это действительно содержит полный фактический список данных, но сверку по-прежнему равен нулю.

Мне нужно было на ходу rowCount отфильтрованных строк по мере ввода и фильтрации их на сетке сетки, чтобы я мог динамически обновлять outputLabel с значением строки rowCount в настоящее время отфильтрованной сетки.

int currentRowCount = actualDataListInLazyModelClass.size(); 

Я буду обновлять outputLabel так:

org.primefaces.context.RequestContext.getCurrentInstance.update("myForm:recordCountLabel"); 

Но до этого мне нужно установить свойство введенного боба (View в бэк боб) со значением сверки, но нагнетаемой бобом сам поворачивает вне null как сказано ранее.

getInjectedObj().setNoOfRecords(Integer.toString(currentRowCount)); 

// NULL POINTER потому getInjectedObj() является нулевым

Извините, если я описал вещи более или менее из-за ограничений в моем конце.

+0

Это фактически два отдельных вопроса. Тема не имеет ничего общего с реальной причиной. Помните это в следующий раз. – Kukeltje

+0

Соответственно, я изменил название вопроса. – user2918640

ответ

0

У вас неправильный просмотр. Для CDI на JSF 2.2 должен быть javax.faces.view.ViewScoped, и если вы на JSF 2.0/2.1, но с помощью CDI (вы 'должны'), вы можете использовать OmniFaces Viewscoped

Смотрите также

+0

Существует проблема. В моем проекте используется javaee-api-6.0.jar. Он не содержит класс javax.faces.view.ViewScoped. Он был введен в Java EE 7. Есть ли в этом какое-то обходное решение? – user2918640

+0

Да, для JSF 2.0/2.1 вы можете использовать [OmniFaces ViewScoped] (http://showcase.omnifaces.org/cdi/ViewScoped) (отредактировал мой ответ соответственно) – Kukeltje

+0

Но я использую Primefaces 5.0. Поэтому, возможно, я не могу использовать OmniFaces. Я прав? Поскольку я обязан использовать JBoss EAP 6.3.2 и Java EE 6 API. Итак, до сих пор я использовал java.faces.bean.ViewScoped, поддерживаемый JSF 2.1.28 из модулей EAP 6.3.2. – user2918640

Смежные вопросы