我正在尝试使用Vaadin-cdi注入我的组件和bean。请注意,下面的代码有点简化。
@Theme("valo")
@CDIUI("")
public class MyUI extends UI {
@Inject
private CDIViewProvider provider;
@Override
protected void init(VaadinRequest request) {
Navigator navigator = new Navigator();
navigator.addProvider(provider);
navigator.navigateTo("mypanel");
}
}
这里是MyPanel:
@CDIView("mypanel")
public class MyPanel extends com.vaadin.ui.Panel implements View {
@Inject
private MySubPanel mySubPanel;
@Override
public void enter(ViewChangeListener.ViewChangeEvent event) {
FormLayout layout = new FormLayout();
layout.addComponent(mySubPanel);
this.setContent(layout);
}
}
这是MySubPanel类:
@UIScoped
public class MySubPanel extends Panel {
@Inject
private MyBean myBean;
public MySubPanel() {
myBean.createSomething("Something"); // throws NullPointerException
}
}
最后是MyBean类:
@Stateless
@Default
public class MyBean implements Serializable {
private String something;
public void createSomething(String something) {
this.something = something;
}
}
那么为什么我的MySubPanel
注入的bean没有注入?
我有一个空beans.xml
,我正在使用WildFly 8.1。
答案 0 :(得分:1)
在构造函数中,类变量尚未注入。 bean将在初始化后注入,因此在构造函数中为null。你有两种可能性。
我推荐第二种方法。在这里,您将找到有关不同注射方法的更多信息:http://www.javacodegeeks.com/2013/05/java-ee-cdi-dependency-injection-inject-tutorial.html