CDI @Named bean中的ManagedProperty返回null

我试图处理@ManagedProperty但没有成功!

我一直在遵循这个指南,似乎并不难。 但是我的代码根本行不通

这是一个小片段

@ManagedBean @SessionScoped public class LoginBean { @EJB private LoginUserLocal loginUser; private boolean loggedIn = false; private User user; private StreamedContent image; . . . //-- @Named(value = "messagesBean") @RequestScoped public class MessagesBean { @ManagedProperty(value = "#{loginBean}") private LoginBean loginBean; public LoginBean getLoginBean() { return loginBean; } public void setLoginBean(LoginBean loginBean) { this.loginBean = loginBean; } public String getUser() { System.err.println(loginBean == null); return loginBean.getUser().getUsername(); } 

这段代码给了我一个NullPointerException,说loginBean是null!

任何build议?

您正在将JSF托pipe的bean与CDI bean混合在一起。 你的LoginBean是一个JSFpipe理的bean(它有@ManagedBean注解)。 你的MessageBean是一个CDI bean(它有@Named注解)。 如果您将Message bean更改为JSF托pipebean(用@ManagedBeanreplace@Named ),那么应该解决该问题(它也应该与两个CDI Bean一起使用)。

下面简单介绍两种beantypes之间的注入是如何工作的:

CDI @Named – > CDI @Named(作品)

CDI @Named – > JSF @ManagedBean(只有在注入bean的范围更广时才有效)

JSF @ManagedBean – > JSF @ManagedBean(只有在注入bean的范围更广时才有效)

JSF @ManagedBean – > CDI @Named(不起作用)

但是照顾范围导入类。 @SessionScoped@RequestScoped有不同的类,具体取决于bean的types。

用于@ManagedBeans的javax.faces.bean.SessionScoped

用于CDI javax.enterprise.context.SessionScoped bean的javax.enterprise.context.SessionScoped