Jsf @Inject提供空对象

Jsf @Inject提供空对象,jsf,cdi,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.

我有这两个类,希望使用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为null,对此一无所知。也许我还没有完全理解CDI注射意味着什么

编辑: 这些是完全限定的注释

import javax.ejb.Singleton;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
Edit2:使用的容器是wildfly 11。因为我也使用Maven,所以我的项目结构不会有太多错误,因为我必须遵循Maven规则。 正如我前面提到的,服务器对于我的数据库上的crud操作工作得很好,我以前使用过CDI和JSF。我刚刚将MyBean和MyData添加到我的项目中。 我尝试了@Startup,结果没有改变


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

您是否错误地使用了EJB单例?CDI无法识别javax.ejb.Singleton,因此不会拾取它


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

您是否错误地使用了EJB Singleton?CDI无法识别javax.ejb.Singleton,因此不会拾取它


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

您是否在某个地方配置了该bean?我的IDE创建了一个beans.xml。并且,您是否在其中配置了您的bean?我已将bean发现模式设置为all,所以这应该足够了。在我的项目中,其他使用注入的bean也可以很好地工作。你用什么样的容器运行这个?2.您正在使用的注释的完全限定名称是什么?3.当您只使用普通的JSF托管bean时,这是否有效?您是否在某处配置了该bean?我的IDE创建了一个beans.xml。并且,您是否在其中配置了您的bean?我已将bean发现模式设置为all,所以这应该足够了。在我的项目中,其他使用注入的bean也可以很好地工作。你用什么样的容器运行这个?2.您正在使用的注释的完全限定名称是什么?3.当您只使用普通的JSF托管bean时,这是否有效?它也不适用于更改的注释。此外,CDI确实将EJB单例识别为bean,并且它通常一起使用。事实上,如果您感兴趣,CDI的单例可能会表现出与您所期望的不同的行为。它也不适用于已更改的注释。此外,CDI确实将EJB单例识别为bean,并且通常一起使用。事实上,如果你感兴趣的话,CDI的单例行为可能与你期望看到的不同。