JSF - Converter not found [RESOLVIDO]

Galera eis a exception…

SEVERE: Servlet.service() for servlet [facesServlet] in context with path [/ProjetoOlimpio] threw exception [Expression Error: Named Object: tipoAcaoConverter not found.] with root cause javax.faces.FacesException: Expression Error: Named Object: tipoAcaoConverter not found. at com.sun.faces.application.ApplicationImpl.createConverte

eis o front end:

				<p:outputLabel for="tipo" value="#{msg['entity.tipoAcao']}"/>
				<p:selectOneMenu id="tipo" required="true" converter="tipoAcaoConverter" value="#{acaoController.entity.tipoAcao}" >
						<f:selectItem itemLabel="#{msg['label.selecione.item']}" itemValue="" noSelectionOption="true"/>
						<f:selectItems value="#{tipoAcaoController.listAll}" var="tipoAcao" itemLabel="#{tipoAcao.descricao}" itemValue="#{tipoAcao}" />
				</p:selectOneMenu>

Eis o Converter (q na verdade é um MB)

@ManagedBean(name = "tipoAcaoConverter")
@RequestScoped
public class TipoAcaoConverter extends BaseConverter<TipoAcao, Integer> implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty("tipoAcaoService")
	private TipoAcaoService tipoAcaoService;

	public TipoAcaoConverter() {
	}

	@PostConstruct
	public void init() {
		super.setEntityClass(TipoAcao.class);
		super.setBaseService(tipoAcaoService);
	}

}

Aí eu tenho um BaseConverter abstrato que não vem ao caso… Se precisar é só pedir!!

Você o deixou como ManagedBean, portanto precisa referenciá-lo com EL.
Altere disso:converter="tipoAcaoConverter" para isso: converter="#{tipoAcaoConverter}"

[quote=Rodrigo Sasaki]Você o deixou como ManagedBean, portanto precisa referenciá-lo com EL.
Altere disso:converter="tipoAcaoConverter" para isso: converter="#{tipoAcaoConverter}"[/quote]caso não funcione, tente anotar teu converter com @FacesConverter.

acho que para ser um conveter deveria seguir o modelo adotado pelo faces algo do tipo

/**
 *
 * @author Rogério Martins da Silva 09/02/2012
 * http://www.usinaweb.inf.br
 */
@FacesConverter(value = "statusAlunoConverter")
public class StatusAlunoConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        String retorno = new String();
        if (value.equals("0")) {
            retorno = "Inativo";
        } else if (value.equals("1")) {
            retorno = "Ativo";
        } else {
            retorno = "Transferido";
        }
        return retorno;
    }
}

Verdade, acho que também precisa anotar com @FacesConverter, mas não tenho certeza. Nunca testei sem.

[quote=rogerioeerr]acho que para ser um conveter deveria seguir o modelo adotado pelo faces algo do tipo

[code]
/**
*

  • @author Rogério Martins da Silva 09/02/2012

  • http://www.usinaweb.inf.br
    */
    @FacesConverter(value = “statusAlunoConverter”)
    public class StatusAlunoConverter implements Converter {

    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
    throw new UnsupportedOperationException(“Not supported yet.”);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
    String retorno = new String();
    if (value.equals(“0”)) {
    retorno = “Inativo”;
    } else if (value.equals(“1”)) {
    retorno = “Ativo”;
    } else {
    retorno = “Transferido”;
    }
    return retorno;
    }
    }

[/code][/quote]Esse é o modo correto.
Mas quando se precisa injetar alguma coisa dentro do Converter, até a versão atual do JSF, isso não é possível.
A saída (POG recomendada por muitos, mas muitos mesmo) é de anotar o Converter como MB.

verdade sei que não se pode injetar Ejbs através de um converter, entaum eu faço um lookup para tal

É, essas geralmente são as 2 soluções apontadas, ou você faz um lookup (através de um Service Locator, ou até na mão mesmo), ou anota seu Converter/Validator como ManagedBean.

Na versão 2.2 do JSF, já será suportada injeção em Converters e Validators, mas por enquanto, tem que ser feito algum “workaround”

Galera…

Como estou usando Spring, eu resolvi assim:

@Component
@Scope("request")

e na view eu coloquei o # { } que eu tinha esquecido

valeu galera!
desculpa pelo erro besta!