@Inject给出null对象

时间:2018-01-19 14:02:30

标签: jsf cdi

我有这两个类,并希望使用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:使用的容器是一只野生动物11.由于我也使用Maven,我的项目结构没有太多错误,因为我必须遵循Maven规则。 正如我之前提到的,服务器在我的数据库上运行正常,我之前使用过CDI和JSF。我刚刚将MyBean和MyData添加到我的项目中。 我试过@Startup,结果没有改变。

Edit3:我不认为它是重复的,因为我试图使用@DependsOn()注释并仍然返回null。 NullException不是来自bean,而是来自JavaScript,我想在其中插入一个带有JSF的String,稍后将其处理为图表。 stacktrace说,这个函数将null值传递给bean的构造函数中的成员变量。

1 个答案:

答案 0 :(得分:-2)

您是否错误地使用过EJB Singleton? CDI无法识别javax.ejb.Singleton,因此不会被接收。

对于CDI,请使用javax.inject.Singleton或@ApplicationScoped。