簡體   English   中英

將@SessionScoped CDI bean注入JSF @ManagedBean后,實例為null

[英]Instance null after injecting @SessionScoped CDI bean into a JSF @ManagedBean

我有:-存儲庫類:

@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>

問題:

頁面引發nullpointer異常,因為EmployeeRepository沒有注入到HelloWorldBean中。

在我的情況下可以注入類的實例怎么辦?

使用CDI時,不應使用@ManagedBean (這是JSF批注)。 雖然我實際上已經看到了這一功能,但是大多數實現都不允許您將CDI bean注入經典的JSF bean中。

為了允許CDI注射在JSF豆,CDI規范允許用戶通過指定定義JSF支持豆@Named組合注解與范圍( @RequestScoped@javax.faces.view.ViewScoped@SessionScoped@ApplicationScoped )。

因此,總而言之,以下代碼應該可以解決您的問題,

@Named
@RequestScoped
public class HelloWorldBean {
    @Inject
    private EmployeeRepository employeerepo;
    public String getMsg() {
        return "Hallo";
    }

    public String getEmployees() {
        return String.valueOf(employeerepo.getEmployees().size());
    }
}

您還可以通過網站上的一些舊問題來進一步閱讀該主題,

如何在ManagedBean中注入CDI Bean?

@ManagedProperty在CDI托管bean中不起作用

CDI豆注射液

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM