Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Probkema de Erro de validação

Tenho o seguinte XHTML e estou recebendo erro de validação

com as mensagens abaixo: set 24, 2014 8:09:06 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages INFORMAÇÕES: AVISO: FacesMessage(s) foram enfileirados, mas podem não ter sido exibidos.

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

Abaixo está o XHTML

<?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}" id="modelo">
                <f:selectItems value="#{automovelBean.modelos}" var="modelo" itemLabel="#{modelo.descricao}" itemValue="#{modelo}"></f:selectItems>
            </h:selectOneMenu>
            Ano do Modelo:
            <h:inputText value="#{automovelBean.automovel.anoModelo}" id="anoModelo">
                <f:convertNumber type="number" integerOnly="true" groupingUsed="false"/>
            </h:inputText>
            Ano de Fabricação:
            <h:inputText value="#{automovelBean.automovel.anoFabricacao}" id="anoFabricacao">
                <f:convertNumber type="number" integerOnly="true" groupingUsed="false"/>
            </h:inputText>
            Preço:
            <h:inputText value="#{automovelBean.automovel.preco}" id="preco">
                <f:convertNumber type="number" maxFractionDigits="2" groupingUsed="false"/>
            </h:inputText>
            <h:commandButton value="Salvar" action="#{automovelBean.salvar}"/>
            </h:panelGrid>
        </fieldset>

    </h:form>
    <h:form>
    <h:dataTable value="#{automovelBean.automoveis}" var="automovel">
        <h:column>
            <f:facet name="header">ID</f:facet>
            #{automovel.id}
        </h:column>

        <h:column>
            <f:facet name="header">ANO FABRICACAO</f:facet>
            <h:outputText value="#{automovel.anoFabricacao}">
                <f:convertNumber integerOnly="true" type="number" groupingUsed="false"/>
            </h:outputText>
        </h:column>

        <h:column>
            <f:facet name="header">ANO MODELO</f:facet>
            #{automovel.anoModelo}
        </h:column>

        <h:column>
            <f:facet name="header">PRECO</f:facet>
            #{automovel.preco}
        </h:column>

        <h:column>
            <f:facet name="header">MODELO</f:facet>
            #{automovel.modelo.descricao}
        </h:column>

        <h:column>
            <f:facet name="header">AÇOES</f:facet>
            <h:commandLink value="Editar" action="editar" >
                <f:setPropertyActionListener value="#{automovel}" target="#{automovelBean.automovel}"></f:setPropertyActionListener>
            </h:commandLink>
        </h:column>

    </h:dataTable>
    </h:form>
</h:body>
</html>

Meu AutomovelBeam é o abaixo

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.persistence.EntityManager;

import br.com.virtualinovacoes.livrojpa_exerc.dao.AutomovelDAO;
import br.com.virtualinovacoes.livrojpa_exerc.dao.ModeloDAO;
import br.com.virtualinovacoes.livrojpa_exerc.modelo.Automovel;
import br.com.virtualinovacoes.livrojpa_exerc.modelo.Modelo;
import br.com.virtualinovacoes.livrojpa_exerc.util.JSFUtil;

@ManagedBean
@ViewScoped
public class AutomovelBean implements Serializable{
    /**
     * 
     */
    private static final long serialVersionUID = 7650627329005564990L;
    private EntityManager em;
    private AutomovelDAO automovelDAO;
    private Automovel automovel;
    private List<Modelo> modelos;
    private List<Automovel> automoveis;


    public AutomovelBean() {
        this.em = JSFUtil.getEntityManager();
        this.automovel = new Automovel();
        this.automovelDAO = new AutomovelDAO(this.em);
        this.modelos= new ModeloDAO(em).todos();
    }

    public Automovel getAutomovel() {
        return automovel;
    }

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

    public void salvar(){
        automovelDAO.salvar(this.automovel);
    }

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

    public List<Automovel> getAutomoveis(){
        if(this.automoveis == null)this.automoveis = automovelDAO.todos();
        return this.automoveis;
    }
}

E tenho um convertor customizado devido ao relacionamento entre Automovel e Modelo

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

import br.com.virtualinovacoes.livrojpa_exerc.modelo.Modelo;
import br.com.virtualinovacoes.livrojpa_exerc.util.JSFUtil;

@FacesConverter(forClass=Modelo.class)
public class ModeloConverter implements Converter {
    EntityManager em = JSFUtil.getEntityManager();
    @Override
    public Object getAsObject(FacesContext arg0, UIComponent arg1, String value) {
        if(value == null)return null;
        Modelo modelo = em.find(Modelo.class, Integer.parseInt(value));

        return modelo;
    }

    @Override
    public String getAsString(FacesContext arg0, UIComponent arg1, Object value) {
        Modelo modelo = (Modelo) value;
        if(modelo== null || modelo.getId()== null) return null;
        return String.valueOf(modelo.getId());
    }

}
2 respostas

Resolveu amigo?

solução!

Resolvi essa parte sim.

Obrigado pelo interesse.