Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Problema com conversor - null converter

Pessoal estou com um problema que não consigo entender o erro.

Tenho o seguinte XHTML, que quando uso e coloco o valor na mão por exemplo: 1. Ele converse corretamente. Contudo quando uso o e busco normalmente no meu modeloBean ele mostra normal tanto o id quanto a descrição, sendo que recebo o erro a seguir:

sourceId=j_idt4:j_idt8[severity=(ERROR 2), summary=(j_idt4:j_idt8: Erro de validação: o valor não é válido), detail=(j_idt4:j_idt8: Erro de validação: o valor não é válido)]

É só colocar o selectOneMeny e a busca e tenho esse erro de validação

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://xmlns.jcp.org/jsf/html"
    xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head />
    <h:body>
        <h:form>
            <fieldset>
                <legend>Cadastro de automoveis</legend>
                <h:panelGrid columns="2">
                Modelo:
                <!-- 
                <h:selectOneMenu value="#{automovelBean.automovel.modelo}" converter="conversorModelo">
                    <f:selectItems value="#{modeloBean.modelos}" var="modelo" itemValue="#{modelo}" itemLabel="#{modelo.descricao}"></f:selectItems>
                </h:selectOneMenu>
                 -->

                <h:inputText value="#{automovelBean.automovel.modelo}" converter="conversorModelo"/>

                <h:commandButton value="Salvar" action="#{automovelBean.salvar}"></h:commandButton>
                </h:panelGrid>
            </fieldset>
        </h:form>
    </h:body>
</html>

Aqui está meu managedBeam principal que é o AutomovelBean

package br.com.virtualinovacoes.projetoloucura.bean;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import br.com.virtualinovacoes.projetoloucura.dao.AutomovelDAO;
import br.com.virtualinovacoes.projetoloucura.modelo.Automovel;

@ManagedBean
@ViewScoped
public class AutomovelBean implements Serializable{
    private Automovel automovel = new Automovel();

    public Automovel getAutomovel() {
        return automovel;
    }

    public void setAutomovel(Automovel automovel) {
        this.automovel = automovel;
    }

    public void salvar(){
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("livro-jpa");
        new AutomovelDAO(emf.createEntityManager()).salvar(this.automovel);
    }

}

O ModeloBean

package br.com.virtualinovacoes.projetoloucura.bean;

import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.persistence.Persistence;

import br.com.virtualinovacoes.projetoloucura.dao.ModeloDAO;
import br.com.virtualinovacoes.projetoloucura.modelo.Modelo;

@ManagedBean
public class ModeloBean {
    private List<Modelo> modelos;

    public ModeloBean() {
        this.modelos = new ModeloDAO(Persistence.createEntityManagerFactory("livro-jpa").createEntityManager()).todos();
    }

    public List<Modelo> getModelos() {
        return modelos;
    }

    public void setModelos(List<Modelo> modelos) {
        this.modelos = modelos;
    }


}

E por fim o conversor

package br.com.virtualinovacoes.projetoloucura.conversor;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import javax.persistence.Persistence;

import br.com.virtualinovacoes.projetoloucura.dao.ModeloDAO;
import br.com.virtualinovacoes.projetoloucura.modelo.Modelo;

@FacesConverter(forClass=Modelo.class,value="conversorModelo")
public class ConversorModelo implements Converter{

    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
        if(value == null) throw new RuntimeException("Valor nulo no conversor de modelo");
        Modelo modelo = new ModeloDAO(Persistence.createEntityManagerFactory("livro-jpa").createEntityManager()).buscaPorId(Integer.parseInt(value));
        return modelo;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
        if(value == null)throw new RuntimeException("Valor nulo no conversor de modelo");
        Modelo modelo = (Modelo) value;
        return String.valueOf(modelo.getId());
    }

}
1 resposta
solução!

Meu problema era os métodos hashcode e equals.