JSF 2 - Por que o @ManagedProperty é null?

3 respostas
M
Colegas, Por que o atributo model no ManagedBean abaixo é null? Muito obrigado, Marques
@ManagedBean(name="userBean")
@ViewScoped
public class UserBean implements Serializable{
	
	private static final long serialVersionUID = 1L;
	
	@ManagedProperty(name="model", value="#{userService}")
	private UserService model;
	
	public void teste() {
		if (model == null) {
			System.out.println("model is null");
		}
	}

	public UserService getModel() {
		return model;
	}

	public void setModel(UserService model) {
		this.model = model;
	}

}
O Service onde @Service é a classe org.springframework.stereotype.Service)
@Service("userService")
public class UserService {
	
	public void teste() {
		//nothing here;
	}
}

3 Respostas

A

Olá,

Não dá para misturar injeções assim, cada framework é responsável por controlar suas dependências.

Usando o @ManagedProperty do JSF, você só pode injetar outros beans reconhecidos pelo JSF (classes com a anotação @ManagedBean). Como o JSF não encontrou nenhum bean com o nome userService, ele inicializou como nulo.

Para usar em conjunto com o Spring, você precisa informar ao JSF que ele deve procurar também nos beans controlados pelo Spring, tem que fazer uma configuração extra no faces-config.xml: JSF 2 inject Spring bean/service with @ManagedProperty and no xml.

Por curiosidade: isso é um exercício ou estudo? Porque, já que está usando Spring, eu acho que seria melhor injetar com as próprias anotações dele, não?

M

Alys,

Na realidade estou seguindo um totorial publicado na javamagazine 101

A

Oi Marques,

Não tenho essa edição da revista, olhei no site, mas obviamente lá não tem o artigo completo. Tentei baixar os fontes, mas, como a edição é mais antiga, não está disponível mais.

No artigo não fala nada sobre configurar os dois em conjunto? Porque, eu posso afirmar que na ausência de outra configuração além da padrão, o JSF não vai procurar nada além das classes anotadas com seu @ManagedBean para injetar propriedades.

Criado 3 de setembro de 2012
Ultima resposta 3 de set. de 2012
Respostas 3
Participantes 2