JSF - Conversion Error setting value 'FEMININO' for 'null Converter', qdo faco submit no form

ola pessoal

tenho o seguinte select

<h:selectOneMenu id="pessoaSexoID" value="#{pessoaFisicaMB.pessoaFisicaDB.pessoaFisica.sexo}">
     <f:selectItems value="#{pessoaFisicaMB.pessoaFisicaDB.pessoaFisica.sexoLista}"/>
</h:selectOneMenu>

que utiliza esse metodo

	public Map getSexoLista() {
		Map<String, String> est = new HashMap<String, String>();
		//ENQUANTO EXISTIR VALOR NO ENUM, ELE LISTA
		for (Sexo type : Sexo.values()) {
			//POR **, TODO ENUM TERMINA EM "FIM", ENTAO QUANDO ENCONTRAR "FIM", ELE SAI DO LOOP
			if (type == Sexo.FIM){break;};
			est.put(type.getDescr(),type.toString());
		} 
		return est; 
	}

que faz parte dessa classe

package br.com.krusst.precadastro.beans;

import java.util.Map;  
import java.util.HashMap;  
   
 public enum Sexo {  
   
     INICIO(0,""),  
     MASCULINO(1,"M"),  
     FEMININO(2,"F"),  
     FIM(3,"");  
   
     private int     id;  
     private String  descr;  
       
     /** 
      * Guarda as relacoes entre a descricao e o valor 
      * de um elemento da enum 
      */  
     private static Map<String, Sexo> relations;  
       
       private Sexo() {  
       }  
   
       private Sexo(int id, String descr) {  
           this.id = id;  
           this.descr = descr;  
       }  
   
       public int getId() {  
           return id;  
       }  
   
       public String getDescr() {  
           return descr;  
       }  
   
       public void setId(int id) {  
           this.id = id;  
       }  
   
       public void setDescr(String descr) {  
           this.descr = descr;  
       }  
         
       /** 
        * Recupera um elemento da enum a partir de uma string 
        * @param descr A string de descricao do elemento 
        * @return Um elemento da enum ou null caso nenhum elemento 
        * seja encontrado para a descricao pesquisada. 
        */  
       public static Sexo getSexoPorDescr(String descr) {  
         return relations.get(descr);  
       }  
         
       /** 
        * Bloco estatico que popula o hashmap com as relacoes entre 
        * descricao e elementos da enum 
        */  
       static {  
         relations = new HashMap<String, Sexo>();  
         for(Sexo s : values()) relations.put(s.getDescr(), s);      
       }  
   
 }

bem apresenti a criança, vamos ao problema agora

qdo faco o submit no form, ele me retorna o seguinte erro

Conversion Error setting value ‘INICIO’ for ‘null Converter’.
ou
Conversion Error setting value ‘FEMININO’ for ‘null Converter’.
ou
Conversion Error setting value ‘MASCULINO’ for ‘null Converter’.

ja envie os dados de diversar formas(pelo id ou descr), porem, nao funcionou

tem como eu consertar isso?
por que ocorre esse erro?
alias, esse erro comecou a ocorrer depois que mudei para JSF 1.1, na versao JSF 1.2 funcionava perfeitamente.

abs
T+

Mesmo problema aqui… meu campo é string e required.

Já li em algum lugar que o JSF 1.2 tem um converter p/ enum, que não existia no 1.1. Talvez seja isso.

cara cria uma classe EnumConverter e adiciona no faces config ela como converter da class java.lang.enum

no getasobject()

return java.lang.Enum.valueOf(stringquechegoudofaces);

no getasstring()

return object.tostring();

valeu

embelezando o post:

o seu converter:

[code]public class EnumConverter implements Converter {

@SuppressWarnings({ "unchecked", "deprecation" })
public Object getAsObject(FacesContext context, UIComponent comp, String value) throws ConverterException {
	Class enumType = comp.getValueBinding("value").getType(context);
	return Enum.valueOf(enumType, value);
}

public String getAsString(FacesContext context, UIComponent component, Object object) throws ConverterException {
	if (object == null) {
		return null;
	}
	Enum<?> type = (Enum<?>) object;
	return type.toString();
}

}

[/code]

no faces-config.xml


<converter>
		<converter-for-class>java.lang.Enum</converter-for-class>
		<converter-class>pt.coface.billy.web.framework.faces.converters.EnumConverter</converter-class>
	</converter>

algum selectXXXMenu


items.add(new SelectItem(ALgumaEnum.VALUE, Enum.name);

flw

Estou tendo o mesmo problema, mas no meu caso é os valores do select item vem de um banco de dados:

Erro::

INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_id_jsp_80308958_2:j_id_jsp_80308958_7[severity=(ERROR 2), summary=(Conversion Error setting value ‘Rosana’ for ‘null Converter’. ), detail=(Conversion Error setting value ‘Rosana’ for ‘null Converter’. )]

:::::::::::::::::: no jsp
Owner: <h:selectOneMenu value="#{ProductFace.selectedProduct.owner}">
<f:selectItems value="#{ProductFace.usersOfSystem}" />
</h:selectOneMenu>

::::::::::::::::: no face
public List getUsersOfSystem() {
List toReturn = new LinkedList();
for (User usr : usrDao.getUsers()) {
toReturn.add(new SelectItem(usr,usr.getName()));
}
return toReturn;
}
public String finishAddNewProduct() {
prodDao.addProduct(selectedProduct);
cachedProducts = null;
return “gotoListProducts”;
}

::::::::::::::: no DAO
public int addProduct(Product prod) {
saveOrUpdatePojo(prod);
return prod.getId();
}

::::::::::::::: entity
@ManyToOne
@JoinColumn(name=“id_owner” )
//@Column(name=“id_owner”, nullable=false)
private User owner;

public User getOwner() {
    return owner;
}

public void setOwner(User owner) {
    this.owner = owner;
}

Cara vc conseguiu resolver, pois seu exemplo parace igual o meu do das video aulas da devmedia. estou com o mesmo problema, se vc conseguir resolver me de um toque. vlw.

Eu tava com esse problema ontem…

ve se ajuda…

http://www.guj.com.br/posts/list/138341.java

esse eskema da devmedia o cara n poe a resposta…

Tem como vcme mandar a parte do seu codigo com o bean e os select Item, toda a parte relacionada, isso se nao for pedir muito é claro… Obrigado.

Ta ai…


O metodo pra pegar todos os itens...
public List<SelectItem> getListaColaboradores(){
		List<Colaborador> myList = new DAOFactory().getColaboradorDAO().listar();
		for(Colaborador c : myList){
			lista.add(new SelectItem(c,c.getNome()));
		}
		return lista;
		
	}

O Conversor que precisar transformar os objetos em string e bla bla bla…
Mano esse metodo aki eh q nem um returnById… so q retorna um pelo nome ou descrição blz?

private GenericDAO<Colaborador> dao = new DAOFactory().getColaboradorDAO();
	
	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Map<String, Object> parametros = new HashMap<String, Object>();   
        parametros.put("nome", value.toString());
		return dao.ObjetoPorCriterio("from Colaborador c where c.nome = :nome", parametros);
	}

	public String getAsString(FacesContext context, UIComponent component, Object classe) {
		return ((Colaborador)classe).getNome();
	}

Acho q eh isso q vc precisa…

qqr coisa so perguntar…
Eu tava com esse msm problema consegui resolver ontem ;/

Olá amigo, ainda encontro dificuldades, vc tem uma classe DAOFactory? obrigado… para por funcionar… estou usando isso no TCC … abraço

Mano vamos lá…

Eu tenho um GenericDAO. e akele DAOFactory so me da a instancia do dao q eu kero no meu caso akele eh d colaborador…
ele chama esse metodo aki…

public T ObjetoPorCriterio(String query, Map<String,Object> parametros){
		Query q = session.createQuery(query);
		
		for(String chave : parametros.keySet()){
			q.setParameter(chave, parametros.get(chave));
		}
		
		try{
			return (T) q.uniqueResult();
		}
		catch (NoResultException e) {
			System.out.println("Nenhum Retorno");
			return null;
		}
	}

Bom ai no Conversor eu uso ele…
ta vendo q ele ped uma String ali vc poe a HQL pra selecionar seu objeto… por nome…
TIPO SELECT * FROM USUARIO WHERE NOME = ‘value que eh enviado pelo metodo akela string ali…’
No Map ali vc seta igualzinho ta ali…
ai eu fiz assim…

public Object getAsObject(FacesContext context, UIComponent component, String value) {
		Map<String, Object> parametros = new HashMap<String, Object>();   
        parametros.put("nome", value.toString());
		return dao.ObjetoPorCriterio("from Colaborador c where c.nome = :nome", parametros);
	}

	public String getAsString(FacesContext context, UIComponent component, Object classe) {
		return ((Colaborador)classe).getNome();
	}

Tenta ai…
e poe seu codigo ai c nao conseguir q eu “TENTO” n manjo mto mas eu tento te ajudar…

Falow