He tenido que crear un componente compuesto en jsf 2.0 y durante la construcción del bean administrado me encontré con el siguiente comportamiento:
Si el managed bean está anotado @ViewScoped, y se quiere agregar un Session bean @EJB, éste último debe ser transitorio (@Transient). Pero en este caso, si se define en el componente un método y se pretende utilizar, se obtiene un error que indica que no encuentra la propiedad del nombre del método en el managed bean.
Entonces, para mi caso la solución fue modificar el managed bean para que fuera @RequestScoped, el Session bean inyectado ya no necesita ser transiente, y el componente entiende correctamente que el atributo definido como un método es efectivamente un método y no una propiedad.
La razón, se hace evidente entonces. @ViewScoped requiere que sus atributos sean o bien transitorios o bien serializables pues para mantener la vista entre peticiones tendrá que enviar su estado en el request, o almacenarlo en la sesión.
No hay comentarios:
Publicar un comentario