Como injetar um service do gerenciado pelo Spring em um converter JSF 2.0?[RESOLVIDO]

3 respostas
PaduaAlves

Seguinte pessoal, to usando JSF 2.0 + Spring 3.0.5 minhas aplicação é gerenciada pelo Faces, ou seja, faço as injeções da seguinte forma:

@ManagedBean
@ViewScoped
public class RelatorioBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@ManagedProperty(value = "#{cursoService}")
	private CursoService cursoService;
        
       //resto da classe
}

Nos managedBeans a injeção funciona perfeitamente porém no converter, meus services nunca são injetados. O que há de errado? Segue abaixo o converter

import javax.faces.bean.ManagedProperty;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;

import br.com.conego.corporativo.service.CursoService;
import br.com.conego.secretaria.entity.Curso;


@FacesConverter(value="cursoConverter")
public class CursoConverter implements Converter {
	
	@ManagedProperty(value = "#{cursoService}")
	private CursoService cursoService;
	
	public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
		if (value != null && !"".equals(value) ) {
			return this.cursoService.findBy(Long.parseLong(value));
		}
		return null;
	}

	public String getAsString(FacesContext ctx, UIComponent component, Object value) {
		if(value == null){
			return "";
		}
		return ((Curso) value).getId().toString();
	}

	public CursoService getCursoService() {
		return cursoService;
	}

	public void setCursoService(CursoService cursoService) {
		this.cursoService = cursoService;
	}
	
}

3 Respostas

Hebert_Coelho

Até onde me lembro Converter não entra no contexto.

Vc teria que buscar um MB na unha tipo:

FacesContext context = FacesContext.getCurrentInstance(); context.getELContext().getELResolver().getValue(context.getELContext(), null, "seuMB");

PaduaAlves

Deu certo, recuperei meu bean e fiz a chamada ao método do service através dele. Eu tava quebrando a cabeça achando que tinha como fazer uma injeção transparente, da forma como é feita no controller, mas não dá. Valeu =D

Hebert_Coelho

Foi meu sonho de consumo fazer isso viu. Fiquei meio desiludido por perceber isso, que injeção não funciona. =/
Really sad.

Criado 14 de dezembro de 2011
Ultima resposta 15 de dez. de 2011
Respostas 3
Participantes 2