jsf ejb cdi jboss-weld managed-bean

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 para javax.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?