【发布时间】:2019-06-04 10:44:03
【问题描述】:
我有: - 存储库类:
@SessionScoped
public class EmployeeRepository {
@PersistenceContext
EntityManager entityManager;
public List<Employee> getEmployees(){
TypedQuery<Employee> qu = entityManager.createQuery("select * from Employee", Employee.class);
List<Employee> emp2 = qu.getResultList();
return emp2;
}
}
和
托管 Bean:
@ManagedBean(name = "helloWorldBean")
public class HelloWorldBean {
@Inject
private EmployeeRepository employeerepo;
public String getMsg() {
return "Hallo";
}
public String getEmployees() {
return String.valueOf(employeerepo.getEmployees().size());
}
}
还有一个 JSF 页面:
<h:head>
<title>JavaCodeGeeks</title>
</h:head>
<h:body>
- Message : <h:outputText value="#{helloWorldBean.msg}" />
- Employee count : <h:outputText value="#{helloWorldBean.employees}" />
</h:body>
</html>
我的 META-INF 文件夹 (src\META-INF) 中有一个 beans.xml,没有特殊配置:
<?xml version="1.0"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all" version="1.1">
</beans>
问题:
页面抛出空指针异常,因为 EmployeeRepository 没有注入 HelloWorldBean。
在我的情况下如何注入类的实例?
【问题讨论】:
-
您使用的是哪个版本的 CDI?
-
javaee-api-6.0.jar 。 bean_1_1.xsd。我的 beans.xml 在 src\META-INF\
-
好的,bean_1_1 是 CDI 1.1。您在 beans.xml 中有
bean-discovery-mode属性吗?哪个是价值?顺便说一句,CDI 1.1 是 Java EE 7,而你有 Java EE 6 api... -
我已将 beans.xml 的内容添加到问题中。感谢您的帮助。
-
您使用的是哪个应用服务器或 servlet 容器(和版本)?