【发布时间】:2018-06-28 19:06:40
【问题描述】:
我有这两个类,想用MyData的方法在MyBean中插入数据。
@Named
@RequestScoped
public class MyBean implements Serializable {
@Inject
private MyData myData;
public MyBean() {
// NullPointerException, because myData is null
this.dataList = myData.method();
}
...
}
@Singleton
class MyData {
method(){
...
}
}
另一方面,MyData 注入了一个控制器类 myHandler:
@Singleton
public class myHandler {...}
我不断收到错误消息,myData.method() 为空并且对此一无所知。可能我还没有完全理解CDI注入是什么意思?
编辑: 这些是完全限定的注释。
import javax.ejb.Singleton;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
Edit2:使用的容器是 wildfly 11。由于我也使用 Maven,因此我的项目结构没有什么可以做的,因为我必须遵循 Maven 规则。
正如我之前提到的,服务器在我之前使用 CDI 和 JSF 的数据库上的 crud 操作上工作得很好。我刚刚将 MyBean 和 MyData 添加到我的项目中。
我试过@Startup,结果没有改变。
Edit3:我不认为这是重复的,因为我尝试使用 @DependsOn() 注释并且仍然返回 null。 NullException 不是来自 bean,而是来自 JavaScript,我想在其中插入一个带有 JSF 的字符串,稍后将其处理为图表。 stacktrace 说,这个函数将 null 值传递给 bean 构造函数中的成员变量。
【问题讨论】:
-
你在某处配置了那个 bean 吗?
-
我的 IDE 创建了 beans.xml。
-
还有,你在那里配置了你的 bean 吗?
-
我已将 bean-discovery-mode 设置为 all,所以这应该足够了。我项目中使用注入的其他 bean 也可以正常工作。
-
在找到问题之前有很多问题需要回答: 1. 你在什么(什么样的)容器中运行它? 2. 您正在使用的注释的完全限定名称是什么? 3. 当您只使用普通的 JSF 托管 bean 时,这是否有效?