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());
}
}