JSF 2 - Por que o @ManagedProperty é null?

Colegas,
Por que o atributo model no ManagedBean abaixo é null?
Muito obrigado,
Marques

[code]
@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;
}

}[/code]

O Service onde @Service é a classe org.springframework.stereotype.Service)

[code]
@Service(“userService”)
public class UserService {

public void teste() {
	//nothing here;
}

}[/code]

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?

Alys,

Na realidade estou seguindo um totorial publicado na javamagazine 101

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.