E ai pessoal, estou usando jsf2 e injetando um bean no outro com a anotação @ManagedProperty.
Percebi que ao utilizá-la no construtor da classe, esta, por sua vez, não é instanciada, já contornei o problema, mas gostaria de saber se alguém já passou pelo problema ou o conseguiu uma solução para tal comportamento. Ou, simplesmente, não é possível fazer isso.
Segue um exemplo do que eu estou falando
@ManagedBean(name="adminBean")
@ViewScoped
public class AdminBean implements Serializable{
private static final long serialVersionUID = 1L;
private int media;
@ManagedProperty(value = "aluno") //injeção do bean - session bean
private Aluno aluno;
public AdminBean(){
this.media = calculaMedia(aluno.getNotas()); //Ao utilizar aqui o Aluno, a classe não instância.
}
//getters e setters
Caso queira utilizar o aluno em algum outro método que não seja o construtor, não ocorrerá erro, alguem sabe pq isso ocorre?
[]s
O objetivo do @PostConstrust é justamente esse. Não acessar objeto injetado no construtor se deve ao ciclo de vida de injeção de dependência pois no momento do construtor não existe esse objeto ainda.
Valeu pela resposta ayslanms,
estou desenvolvendo com o Tomcat7, o qual não tem suporte para CDI.
E estou tomando como referência o livro do David Geary, Core Java Server Faces, ele fala brevemente sobre @ManagedProperty e eu não sabia do @PostConstrust.
Logo pelo que eu entendi para atribuir um valor a um atributo no momento da instanciação com o @ManagedProperty será necessário criar um método com a notação @PostConstruct.