powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin: Проблема с @EJB иньекцией в класс который не UI
5 сообщений из 5, страница 1 из 1
Vaadin: Проблема с @EJB иньекцией в класс который не UI
    #39270545
Фотография Alex123F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
привет всем.
проблема с иньекцией таблицы в класс, который за "пределами" UI.
ту же самую таблицу можно без проблем инжектировать показанным в коде способом в UI-класс.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
import com.mycompany.backend.testblock.DocuIF
import com.mycompany..models.entity.Document
import javax.ejb.EJB;
import com.vaadin.cdi.CDIUI;
 
@Theme("demo-theme")
@CDIUI("")
public class MyUI extends UI {
 
@EJB  
DocuIF docu;
 
public static class Servlet extends VaadinCDIServlet {
@Override
        protected void servletInitialized() throws ServletException {
       super.servletInitialized();
   //.....................
   }
 
protected void init(final VaadinRequest request) {

List<Document> getallDocu = docu.getAll();  //---- Here the Entity can be perfectly initialised!!!
//..........
  }
}



Но если делать то же самое в другом классе который в данном случае extends VerticalLayout implements View
то Entity "docu" не инициализируется = null.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
import com.mycompany.backend.testblock.DocuIF
import com.mycompany..models.entity.Document
import javax.ejb.EJB;
import com.vaadin.cdi.CDIView;

public final class ConditionModel  extends VerticalLayout implements View {

public static final String VIEW_ID = "dashboard";

@EJB  
DocuIF docu;

@CDIView(value = ConditionModel.VIEW_ID)
// I tried to play with some other annotations : @UIScoped; @ManagedBean; @SessionScoped but it does not help

public ConditionModel()  {  //constructor

List<Document> getallDocu = docu.getAll();   //Here docu = null 
//.....................

  }
}


пробовал разные аннотации. одна из них @CDIView как в приведенном коде
можно "достичь" того же результата в UI-классе если например закомментировать аннотацию @CDIUI("").
Код максимально упрощен.
класс который не UI я использую как одну из "страниц" в навигационной панели.
хотел вставить туда пару таблиц. из за данного эффекта не получается.
В чем ошибка, как инжектировать правильно в класс который не UI?
...
Рейтинг: 0 / 0
Vaadin: Проблема с @EJB иньекцией в класс который не UI
    #39270638
oneHalf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
@CDIView(“dashboard”)
public class DashboardView extends VerticalLayout implements View {
   @EJB
   private CityBean cityBean;



У чувака все работает, это кусок его кода с форума ваадина.
...
Рейтинг: 0 / 0
Vaadin: Проблема с @EJB иньекцией в класс который не UI
    #39270650
Фотография Alex123F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да, перебирая все аннотации я и нашел этот кусок с @CDIView(“dashboard”).
И попробовал доделать как там написано,все равно без ожидаемого результата.
надо как то сгенерить правильно CDIViewProvider класс.
до мой приведенный выше view-класс работал как страничка в навигаторе UI-классе.
Код: java
1.
2.
3.
4.
 protected void init(final VaadinRequest request) {
//....
  navigator.addView("condmodel", ConditionModel.class);
}
...
Рейтинг: 0 / 0
Vaadin: Проблема с @EJB иньекцией в класс который не UI
    #39270855
Фотография Alex123F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
докопал таки как работает это все.
надо инжектить в UI CDIViewProvider.
который например можно взять здесь
https://github.com/vaadin/cdi/blob/master/vaadin-cdi/src/main/java/com/vaadin/cdi/CDIViewProvider.java
Код: java
1.
2.
 @Inject
    private CDIViewProvider viewProvider;


потом добавить соотв класс в навигатор UI:
navigator.addView("dashboard", ConditionModel.class);
и добавить в меню:
menuItems.put("dashboard", "Conditions Model");

а в View-классе (ConditionModel.class) который я приводил выше сделать аннотацию:
Код: java
1.
@CDIView("dashboard")


и добавить метод с аннотацией @PostConstruct где инициализировать все инжектированные Entity:
пишут что метод должен быть protected но оно так не работает.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
@PostConstruct 
//   protected
         void initialize() {
    List<Document> getallDocu = docu.getAll();
    BeanItemContainer<> kontDoku = new BeanItemContainer<>(Document.class, getallDoku);    
    kontDoku.removeAllItems();
//................
}


все выше приведенное полезно если в Vaadin делать мгогостраничный dashboard , и в каждую страницу (class) добавлять необходимые Entity
...
Рейтинг: 0 / 0
Vaadin: Проблема с @EJB иньекцией в класс который не UI
    #39270856
Фотография Alex123F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл.. сам провайдер конечно надо тоже добавить в навигатор в UI классе:
Код: java
1.
2.
navigator.addProvider(viewProvider);
navigator.addView("dashboard", ConditionModel.class);
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Vaadin: Проблема с @EJB иньекцией в класс который не UI
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]