【发布时间】:2015-11-24 20:31:01
【问题描述】:
所以我有三个 CDI 托管 Bean,在其中两个中我注入了 loginMB,所以我可以在其中使用 Session 属性,但它们都在抛出 NullPointerException :
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
@Named(value = "loginMB")
@SessionScoped
public class LoginMB implements Serializable{
private NomadUser usuarioEnSession;
private UserSettings configuracionUsuarioEnSession;
public void login(){}
// login method ....
// where I already verified that both usuarioEnSession & config... != null
}
- 两者都有 ManagedProperty 的设置器
MB 1:
@Named(value = "fotoPerfilMB")
@RequestScoped
public class FotoPerfilMB implements Serializable {
@ManagedProperty(value = "#{loginMB}")
private LoginMB loginMB;
@PostConstruct
public void init(){
// this throws NullPOinterException
loginMB.getConfiguracionUsuarioEnSession();
}
}
MB 2:
@Named(value = "imagenesMB")
@RequestScoped
public class ImagenesMB implements Serializable {
@ManagedProperty(value = "#{loginMB}")
private LoginMB loginMB;
@EJB
private UserImagesFacade servicioImagenes;
private int idUsuarioEnSession;
private NomadUser usuarioEnSession;
private List<UserImages> listaImagenes;
@PostConstruct
public void init() {
try {
usuarioEnSession = loginMB.getUsuarioEnSession();
idUsuarioEnSession = usuarioEnSession.getId();
listaImagenes = servicioImagenes.listaImagenes(idUsuarioEnSession);
} catch (NullPointerException e) {
// this is allways thrown
System.err.println("loginMB is null");
}
}
如您所见,我一直在使用 try-catch 语句,打印 ManagedProperty 值,但我似乎无法理解为什么它的 null,这是堆栈跟踪。提前致谢。
当我删除try-catch 语句时会发生这种情况,我理解它是因为@postConstruct 方法中抛出了一个Exception,而我现在从loginMB ManagedProperty 中得到NullPointerException
org.jboss.weld.exceptions.WeldException: WELD-000049:
Unable to invoke public void co.nomad.managedBeans.FotoPerfilMB.init()
on co.nomad.managedBeans.FotoPerfilMB@672d4b74
【问题讨论】: