Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何在ManagedBean中注入CDIBean?_Jsf_Jakarta Ee_Ejb_Java Ee 6_Cdi - Fatal编程技术网

Jsf 如何在ManagedBean中注入CDIBean?

Jsf 如何在ManagedBean中注入CDIBean?,jsf,jakarta-ee,ejb,java-ee-6,cdi,Jsf,Jakarta Ee,Ejb,Java Ee 6,Cdi,我想在ManagedBean中注入一个CDIBean,使用注释@inject或@product。我使用的CDIBean是: @Named @Startup @ApplicationScoped public class BaseBean { private List<String> custs; public List<String> getCusts() { return custs; } public void setCusts(List<Stri

我想在ManagedBean中注入一个CDIBean,使用注释@inject或@product。我使用的CDIBean是:

@Named
@Startup
@ApplicationScoped
public class BaseBean {

private List<String> custs;

public List<String> getCusts() {
    return custs;
}

public void setCusts(List<String> emps) {
    this.custs = emps;
}

public BaseBean(){

}

@PostConstruct
void init() {
    custs = new ArrayList<String>();
    custs.add("Cust1");
    custs.add("Cust3");
    custs.add("Cust2");
    custs.add("Cust4");
}

}
错误是:

Services which failed to start:      service jboss.deployment.unit."JSF1.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."JSF1.war".PARSE: Failed to process phase PARSE of deployment "JSF1.war"

12:51:11,482 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"JSF1.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"JSF1.war\".PARSE: Failed to process phase PARSE of deployment \"JSF1.war\""}}}}

如果您正在使用
@ManagedBean
使用
@ManagedProperty
注入属性:

@ManagedProperty(value = "#{baseBean}")
private BaseBean dBean;

// getter and setter

通过在应用程序中放入
WEB-INF/beans.xml
文件,确保已启用CDI。

如果在CDI bean上使用
@Named
,则@patlov的建议将起作用。但是,如果您在支持CDI的环境中工作,请不要使用
@ManagedBean
。相反,始终使用CDI。看到这一点,我相信你会发现很多其他人强烈反对你的做法

只要从
javax.faces.bean.SessionScoped
切换到
javax.enterprise.context.SessionScoped
,一切都会神奇地工作。但是,您可能会遇到CDI中缺少
@ViewScoped
,在这种情况下,请使用JBoss Seam或Apache Deltaspike之类的工具为您实现它。另外一个好处是,如果您已经为JSF编写了现有代码,它们还将自动用CDI作用域替换所有JSF作用域

更新: 这应该是beans.xml的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>


当我将其添加到WEB-INF下时,它会在服务器的开始处抛出一个错误:org.jboss.msc.service.StartException。当我在META-INF下添加它时,它会启动服务器,但问题并没有消除。仍然是NullPointerException。
StartException
是正确的方向。可能意味着现在启用了CDI,在CDI开始工作之前,您需要解决一些与CDI相关的问题。不知何故,我忽略了这一点。stacktrace也没有给出任何提示。@arjacsoh对不起,我想我应该提到,您应该将
@Named
添加到您希望从EL(表达式语言)即您的页面访问的任何CDI bean中。因此,删除
@ManagedBean
并将
@Named
添加到
Hello
。至于异常,请发布堆栈跟踪,否则就不知道出了什么问题。这就是我所做的。我用@Named替换了@ManagedBean,另外还有导入语句javax.enterprise.context.SessionScoped,如您所述。正如我在更新中所解释的那样,数据不会呈现到JSF页面。您也可以在更新中说,您得到了一个开始异常-您可以为此发布堆栈跟踪吗?好的,在调整beans.xml的内容之后,这次它可以工作了。我在书中读到,即使是一个空的beans.xml文件也足以完成这项工作,这让我受骗了。是的,这是误导,因为您仍然需要根元素。
Services which failed to start:      service jboss.deployment.unit."JSF1.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."JSF1.war".PARSE: Failed to process phase PARSE of deployment "JSF1.war"

12:51:11,482 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"JSF1.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"JSF1.war\".PARSE: Failed to process phase PARSE of deployment \"JSF1.war\""}}}}
@ManagedProperty(value = "#{baseBean}")
private BaseBean dBean;

// getter and setter
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>