jsf - ManagedProperty en CDI @Named bean devuelve null
ejb jboss-weld (1)
Está mezclando beans administrados JSF con beans CDI. Su LoginBean es un bean gestionado JSF (tiene la anotación @ManagedBean
). Su MessageBean es un bean CDI (tiene la anotación @Named
). Si cambió el bean Message a un bean gestionado JSF (reemplazando @Named
con @ManagedBean
), entonces el problema debería resolverse (también debería funcionar con dos beans CDI).
Aquí hay una breve descripción de cómo funciona la inyección entre ambos tipos de frijoles:
CDI @Named -> CDI @Named (funciona)
CDI @Named -> JSF @ManagedBean (funciona solo si el alcance del bean inyectado es más amplio)
JSF @ManagedBean -> JSF @ManagedBean (funciona solo si el alcance del bean inyectado es más amplio)
JSF @ManagedBean -> CDI @Named (no funcionará)
Pero cuida las clases de importación de alcance. Hay diferentes clases para @SessionScoped
y @RequestScoped
dependiendo del tipo de bean.
javax.faces.bean.SessionScoped
parajavax.faces.bean.SessionScoped
javax.enterprise.context.SessionScoped
para CDI @Named beans
¡Estoy tratando de lidiar con @ManagedProperty pero sin éxito!
He estado siguiendo esta guía, y no parece tan difícil. ¡Pero mi código simplemente no funciona!
Aquí hay un pequeño fragmento
@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();
}
Este código me da una NullPointerException, diciendo que loginBean es nulo!
¿Cualquier sugerencia?