Record method has no action and link of Dependent x Driver is not done

Asked

Viewed 74 times

1

When developing a simple application where the dependent is linked to his responsible one who is a driver, when I click to create the link and record dependent nothing happens, only the following message is launched without interrupting the application.

out 28, 2017 3:19:15 PM com.sun.faces.renderkit.RenderKitUtils renderUnhandledMessages
INFO: WARNING: FacesMessage(s) have been enqueued, but may not have been displayed.
sourceId=j_idt4:motorista[severity=(ERROR 2), summary=(j_idt4:motorista: 'Pessoa [nome=ROBSON GOMES JUNIOR, cpf=, rg=, nomeMae=, nomePai=, dataNascimento=, rua=, numeroCasa=, bairro=, cidade=, estado=, cep=]' must be a number consisting of one or more digits.), detail=(j_idt4:motorista: 'Pessoa [nome=ROBSON GOMES JUNIOR, cpf=, rg=, nomeMae=, nomePai=, dataNascimento=, rua=, numeroCasa=, bairro=, cidade=, estado=, cep=]' must be a number between -2147483648 and 2147483647 Example: 9346)]

Bean

package modelo;

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

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

import modeloDAO.DAO;

@ManagedBean
@ViewScoped
public class DependenteBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private Dependente dependente = new Dependente();
    private Integer motoristaId;

    public void setMotoristaId(Integer motoristaId) {
        this.motoristaId = motoristaId;
    }

    public Integer getMotoristaId() {
        return motoristaId;
    }

    public Dependente getDependente() {
        return dependente;
    }

    public List<Motorista> getMotoristas() {
        return new DAO<Motorista>(Motorista.class).listaTodos();
    }

    public void gravarMotorista() {
        Motorista motorista = new DAO<Motorista>(Motorista.class).buscaPorId(this.motoristaId);
        this.dependente.adicionaMotorista(motorista);
    }

    public void gravar() {
        gravarMotorista();
        System.out.println("Gravando Dependente: " + this.dependente.toString());
        new DAO<Dependente>(Dependente.class).adiciona(this.dependente);
        this.dependente = new Dependente();

    }

}

XHTML

<h:body>
    <h1>Novo Dependente</h1>
    <h:form>

        <fieldset>
            <legend>Dados do Dependente</legend>
            <h:panelGrid columns="2">
                <h:outputLabel value="Nome: " for="nome" />
                <h:inputText id="nome" value="#{dependenteBean.dependente.nome}" />

                <h:outputLabel value="Data de Nascimento: " for="dataNascimento" />
                <h:inputText id="dataNascimento" value="#{dependenteBean.dependente.dataNascimento}" />

                <h:outputLabel value="CPF: " for="cpf" />
                <h:inputText id="cpf" value="#{dependenteBean.dependente.cpf}" />

                <h:outputLabel value="RG: " for="rg" />
                <h:inputText id="rg" value="#{dependenteBean.dependente.rg}" />

                <h:outputLabel value="Nome da Mãe: " for="nomeMae" />
                <h:inputText id="nomeMae" value="#{dependenteBean.dependente.nomeMae}" />
                <h:outputLabel value="Nome da Pai: " for="nomePai" />
                <h:inputText id="nomePai" value="#{dependenteBean.dependente.nomePai}" />
                <h:outputLabel value="Nome da Rua: " for="rua" />
                <h:inputText id="rua" value="#{dependenteBean.dependente.rua}" />
                <h:outputLabel value="Numero da Casa ou Apartamento: " for="numeroCasa" />
                <h:inputText id="numeroCasa" value="#{dependenteBean.dependente.numeroCasa}" />
                <h:outputLabel value="Bairro: " for="bairro" />
                <h:inputText id="bairro" value="#{dependenteBean.dependente.bairro}" />
                <h:outputLabel value="Cidade: " for="cidade" />
                <h:inputText id="cidade" value="#{dependenteBean.dependente.cidade}" />
                <h:outputLabel value="Estado: " for="estado" />
                <h:inputText id="estado" value="#{dependenteBean.dependente.estado}" />
                <h:outputLabel value="CEP: " for="cep" />
                <h:inputText id="cep" value="#{dependenteBean.dependente.cep}" />
                <h:commandButton value="Cadastrar" action="#{dependenteBean.gravar}" />
            </h:panelGrid>
        </fieldset>

        <fieldset>
            <legend>Dados do Motorista</legend>
            <h:outputLabel value="Selecione Motorista" for="motorista" />
            <h:selectOneMenu value="#{dependenteBean.motoristaId}" id="motorista">
                <f:selectItems value="#{dependenteBean.motoristas}" var="motorista" itemLabel="#{motorista.nome}" itemValue="#{pessoa.motorista.id}" />
            </h:selectOneMenu>
<!--            <h:message for="motorista" /> -->
            <h:commandButton value="Gravar Motorista" action="#{dependenteBean.gravarMotorista}" />
        </fieldset>
    </h:form>
</h:body>

Dependent Class

package modelo;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "DEPENDENTE")
public class Dependente extends Pessoa {

    @ManyToOne(fetch = FetchType.EAGER) // MUITOS DEPENDENTES PARA 1 MOTORISTA
    private Motorista motorista;

    public Dependente() {
        super();
    }

    @Override
    public String getNome() {
        // TODO Auto-generated method stub
        return super.getNome();
    }

    @Override
    public void setNome(String nome) {
        // TODO Auto-generated method stub
        super.setNome(nome);
    }

    @Override
    public String getCpf() {
        // TODO Auto-generated method stub
        return super.getCpf();
    }

    @Override
    public void setCpf(String cpf) {
        // TODO Auto-generated method stub
        super.setCpf(cpf);
    }

    @Override
    public String getRg() {
        // TODO Auto-generated method stub
        return super.getRg();
    }

    @Override
    public void setRg(String rg) {
        // TODO Auto-generated method stub
        super.setRg(rg);
    }

    @Override
    public String getNomeMae() {
        // TODO Auto-generated method stub
        return super.getNomeMae();
    }

    @Override
    public void setNomeMae(String nomeMae) {
        // TODO Auto-generated method stub
        super.setNomeMae(nomeMae);
    }

    @Override
    public String getNomePai() {
        // TODO Auto-generated method stub
        return super.getNomePai();
    }

    @Override
    public void setNomePai(String nomePai) {
        // TODO Auto-generated method stub
        super.setNomePai(nomePai);
    }

    @Override
    public String getDataNascimento() {
        // TODO Auto-generated method stub
        return super.getDataNascimento();
    }

    @Override
    public void setDataNascimento(String dataNascimento) {
        // TODO Auto-generated method stub
        super.setDataNascimento(dataNascimento);
    }

    @Override
    public String getRua() {
        // TODO Auto-generated method stub
        return super.getRua();
    }

    @Override
    public void setRua(String rua) {
        // TODO Auto-generated method stub
        super.setRua(rua);
    }

    @Override
    public String getNumeroCasa() {
        // TODO Auto-generated method stub
        return super.getNumeroCasa();
    }

    @Override
    public void setNumeroCasa(String numeroCasa) {
        // TODO Auto-generated method stub
        super.setNumeroCasa(numeroCasa);
    }

    @Override
    public String getBairro() {
        // TODO Auto-generated method stub
        return super.getBairro();
    }

    @Override
    public void setBairro(String bairro) {
        // TODO Auto-generated method stub
        super.setBairro(bairro);
    }

    @Override
    public String getCidade() {
        // TODO Auto-generated method stub
        return super.getCidade();
    }

    @Override
    public void setCidade(String cidade) {
        // TODO Auto-generated method stub
        super.setCidade(cidade);
    }

    @Override
    public String getEstado() {
        // TODO Auto-generated method stub
        return super.getEstado();
    }

    @Override
    public void setEstado(String estado) {
        // TODO Auto-generated method stub
        super.setEstado(estado);
    }

    @Override
    public String getCep() {
        // TODO Auto-generated method stub
        return super.getCep();
    }

    @Override
    public void setCep(String cep) {
        // TODO Auto-generated method stub
        super.setCep(cep);
    }

    // ADICIONA MOTORISTA
    public void adicionaMotorista(Motorista motorista) {
        this.motorista = motorista;
    }

    public Motorista getMotorista() {
        return motorista;
    }

    @Override
    public String toString() {
        return "Dependente [motorista=" + motorista + ", getNome()=" + getNome() + ", getCpf()=" + getCpf() + ", getRg()=" + getRg() + ", getNomeMae()=" + getNomeMae() + ", getNomePai()=" + getNomePai() + ", getDataNascimento()=" + getDataNascimento() + ", getRua()=" + getRua() + ", getNumeroCasa()=" + getNumeroCasa() + ", getBairro()=" + getBairro() + ", getCidade()=" + getCidade() + ", getEstado()=" + getEstado() + ", getCep()=" + getCep() + ", getMotorista()=" + getMotorista() + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((motorista == null) ? 0 : motorista.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Dependente other = (Dependente) obj;
        if (motorista == null) {
            if (other.motorista != null)
                return false;
        } else if (!motorista.equals(other.motorista))
            return false;
        return true;
    }

}

Driver Class

package modelo;

import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name = "MOTORISTA")
public class Motorista extends Pessoa {

    private String cnhMotorista;
    private String validadeCnh;

    @OneToMany(mappedBy = "motorista")
    private List<Dependente> dependentes;

    @ManyToOne
    private Carro carro;

    @OneToMany(mappedBy = "motorista")
    private List<Viagem> viagens;

    public Motorista() {
        super();
    }

    public String getCnhMotorista() {
        return cnhMotorista;
    }

    public void setCnhMotorista(String cnhMotorista) {
        this.cnhMotorista = cnhMotorista;
    }

    public String getValidadeCnh() {
        return validadeCnh;
    }

    public void setValidadeCnh(String validadeCnh) {
        this.validadeCnh = validadeCnh;
    }

    @Override
    public String getNome() {
        // TODO Auto-generated method stub
        return super.getNome();
    }

    @Override
    public void setNome(String nome) {
        // TODO Auto-generated method stub
        super.setNome(nome);
    }

    @Override
    public String getCpf() {
        // TODO Auto-generated method stub
        return super.getCpf();
    }

    @Override
    public void setCpf(String cpf) {
        // TODO Auto-generated method stub
        super.setCpf(cpf);
    }

    @Override
    public String getRg() {
        // TODO Auto-generated method stub
        return super.getRg();
    }

    @Override
    public void setRg(String rg) {
        // TODO Auto-generated method stub
        super.setRg(rg);
    }

    @Override
    public String getNomeMae() {
        // TODO Auto-generated method stub
        return super.getNomeMae();
    }

    @Override
    public void setNomeMae(String nomeMae) {
        // TODO Auto-generated method stub
        super.setNomeMae(nomeMae);
    }

    @Override
    public String getNomePai() {
        // TODO Auto-generated method stub
        return super.getNomePai();
    }

    @Override
    public void setNomePai(String nomePai) {
        // TODO Auto-generated method stub
        super.setNomePai(nomePai);
    }

    @Override
    public String getDataNascimento() {
        // TODO Auto-generated method stub
        return super.getDataNascimento();
    }

    @Override
    public void setDataNascimento(String dataNascimento) {
        // TODO Auto-generated method stub
        super.setDataNascimento(dataNascimento);
    }

    @Override
    public String getRua() {
        // TODO Auto-generated method stub
        return super.getRua();
    }

    @Override
    public void setRua(String rua) {
        // TODO Auto-generated method stub
        super.setRua(rua);
    }

    @Override
    public String getNumeroCasa() {
        // TODO Auto-generated method stub
        return super.getNumeroCasa();
    }

    @Override
    public void setNumeroCasa(String numeroCasa) {
        // TODO Auto-generated method stub
        super.setNumeroCasa(numeroCasa);
    }

    @Override
    public String getBairro() {
        // TODO Auto-generated method stub
        return super.getBairro();
    }

    @Override
    public void setBairro(String bairro) {
        // TODO Auto-generated method stub
        super.setBairro(bairro);
    }

    @Override
    public String getCidade() {
        // TODO Auto-generated method stub
        return super.getCidade();
    }

    @Override
    public void setCidade(String cidade) {
        // TODO Auto-generated method stub
        super.setCidade(cidade);
    }

    @Override
    public String getEstado() {
        // TODO Auto-generated method stub
        return super.getEstado();
    }

    @Override
    public void setEstado(String estado) {
        // TODO Auto-generated method stub
        super.setEstado(estado);
    }

    @Override
    public String getCep() {
        // TODO Auto-generated method stub
        return super.getCep();
    }

    @Override
    public void setCep(String cep) {
        // TODO Auto-generated method stub
        super.setCep(cep);
    }

    public List<Dependente> getDependentes() {
        return dependentes;
    }

    public void setDependentes(List<Dependente> dependentes) {
        this.dependentes = dependentes;
    }

    public Carro getCarro() {
        return carro;
    }

    public void setCarro(Carro carro) {
        this.carro = carro;
    }

    @Override
    public String toString() {
        return "Motorista [getCnhMotorista()=" + getCnhMotorista() + ", getValidadeCnh()=" + getValidadeCnh() + ", getNome()=" + getNome() + ", getCpf()=" + getCpf() + ", getRg()=" + getRg() + ", getNomeMae()=" + getNomeMae() + ", getNomePai()=" + getNomePai() + ", getDataNascimento()=" + getDataNascimento()   + ", getRua()=" + getRua() + ", getNumeroCasa()=" + getNumeroCasa() + ", getBairro()=" + getBairro() + ", getCidade()=" + getCidade() + ", getEstado()=" + getEstado() + ", getCep()=" + getCep()   + ", getDependentes()=" + getDependentes() + ", getCarro()=" + getCarro() + "]";
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((carro == null) ? 0 : carro.hashCode());
        result = prime * result + ((cnhMotorista == null) ? 0 : cnhMotorista.hashCode());
        result = prime * result + ((dependentes == null) ? 0 : dependentes.hashCode());
        result = prime * result + ((validadeCnh == null) ? 0 : validadeCnh.hashCode());
        result = prime * result + ((viagens == null) ? 0 : viagens.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Motorista other = (Motorista) obj;
        if (carro == null) {
            if (other.carro != null)
                return false;
        } else if (!carro.equals(other.carro))
            return false;
        if (cnhMotorista == null) {
            if (other.cnhMotorista != null)
                return false;
        } else if (!cnhMotorista.equals(other.cnhMotorista))
            return false;
        if (dependentes == null) {
            if (other.dependentes != null)
                return false;
        } else if (!dependentes.equals(other.dependentes))
            return false;
        if (validadeCnh == null) {
            if (other.validadeCnh != null)
                return false;
        } else if (!validadeCnh.equals(other.validadeCnh))
            return false;
        if (viagens == null) {
            if (other.viagens != null)
                return false;
        } else if (!viagens.equals(other.viagens))
            return false;
        return true;
    }

}

DAO

package modeloDAO;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;

public class DAO<T> {


    private final Class<T> classe;


    public DAO(Class<T> classe) {
        this.classe = classe;
    }

    public void adiciona(T t) {

        // consegue a entity manager
        EntityManager em = new JPAUtil().getEntityManager();

        // abre transacao
        em.getTransaction().begin();

        // persiste o objeto
        em.persist(t);

        // commita a transacao
        em.getTransaction().commit();

        // fecha a entity manager
        em.close();
    }

    public void remove(T t) {
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();

        em.remove(em.merge(t));

        em.getTransaction().commit();
        em.close();
    }

    public void atualiza(T t) {
        EntityManager em = new JPAUtil().getEntityManager();
        em.getTransaction().begin();

        em.merge(t);

        em.getTransaction().commit();
        em.close();
    }

    public List<T> listaTodos() {
        EntityManager em = new JPAUtil().getEntityManager();
        CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
        query.select(query.from(classe));

        List<T> lista = em.createQuery(query).getResultList();

        em.close();
        return lista;
    }

    public T buscaPorId(Integer id) {
        EntityManager em = new JPAUtil().getEntityManager();
        T instancia = em.find(classe, id);
        em.close();
        return instancia;
    }

    public int contaTodos() {
        EntityManager em = new JPAUtil().getEntityManager();
        long result = (Long) em.createQuery("select count(n) from livro n").getSingleResult();
        em.close();

        return (int) result;
    }

    public List<T> listaTodosPaginada(int firstResult, int maxResults) {
        EntityManager em = new JPAUtil().getEntityManager();
        CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
        query.select(query.from(classe));

        List<T> lista = em.createQuery(query).setFirstResult(firstResult).setMaxResults(maxResults).getResultList();

        em.close();
        return lista;
    }

}

1 answer

0

Looking at the HTML of the reported problem, I noticed that in the excerpt:

<f:selectItems value="#{dependenteBean.motoristas}" var="motorista" itemLabel="#{motorista.nome}" itemValue="#{pessoa.motorista.id}" />

you make a reference to an object pessoa which does not exist within the scope of the code, but motorista is declared as the variable’s surname.

The above section should be:

<f:selectItems value="#{dependenteBean.motoristas}" var="motorista" itemLabel="#{motorista.nome}" itemValue="#{motorista.id}" />

In this way, I believe that by changing the code to:

<h:body>
    <h1>Novo Dependente</h1>
<h:form>

    <fieldset>
        <legend>Dados do Dependente</legend>
        <h:panelGrid columns="2">
            <h:outputLabel value="Nome: " for="nome" />
            <h:inputText id="nome" value="#{dependenteBean.dependente.nome}" />

            <h:outputLabel value="Data de Nascimento: " for="dataNascimento" />
            <h:inputText id="dataNascimento" value="#{dependenteBean.dependente.dataNascimento}" />

            <h:outputLabel value="CPF: " for="cpf" />
            <h:inputText id="cpf" value="#{dependenteBean.dependente.cpf}" />

            <h:outputLabel value="RG: " for="rg" />
            <h:inputText id="rg" value="#{dependenteBean.dependente.rg}" />

            <h:outputLabel value="Nome da Mãe: " for="nomeMae" />
            <h:inputText id="nomeMae" value="#{dependenteBean.dependente.nomeMae}" />
            <h:outputLabel value="Nome da Pai: " for="nomePai" />
            <h:inputText id="nomePai" value="#{dependenteBean.dependente.nomePai}" />
            <h:outputLabel value="Nome da Rua: " for="rua" />
            <h:inputText id="rua" value="#{dependenteBean.dependente.rua}" />
            <h:outputLabel value="Numero da Casa ou Apartamento: " for="numeroCasa" />
            <h:inputText id="numeroCasa" value="#{dependenteBean.dependente.numeroCasa}" />
            <h:outputLabel value="Bairro: " for="bairro" />
            <h:inputText id="bairro" value="#{dependenteBean.dependente.bairro}" />
            <h:outputLabel value="Cidade: " for="cidade" />
            <h:inputText id="cidade" value="#{dependenteBean.dependente.cidade}" />
            <h:outputLabel value="Estado: " for="estado" />
            <h:inputText id="estado" value="#{dependenteBean.dependente.estado}" />
            <h:outputLabel value="CEP: " for="cep" />
            <h:inputText id="cep" value="#{dependenteBean.dependente.cep}" />
            <h:commandButton value="Cadastrar" action="#{dependenteBean.gravar}" />
        </h:panelGrid>
    </fieldset>

    <fieldset>
        <legend>Dados do Motorista</legend>
        <h:outputLabel value="Selecione Motorista" for="motorista" />
        <h:selectOneMenu value="#{dependenteBean.motoristaId}" id="motorista">
            <f:selectItems value="#{dependenteBean.motoristas}" var="motorista" itemLabel="#{motorista.nome}" itemValue="#{motorista.id}" />
        </h:selectOneMenu>
<!--            <h:message for="motorista" /> -->
        <h:commandButton value="Gravar Motorista" action="#{dependenteBean.gravarMotorista}" />
    </fieldset>
</h:form>
</h:body>

your application will function again.

  • Weslley Tavares, thanks for your help! But it doesn’t work because as a driver it’s a specialization of person as well as dependent, the code stops working when I remove the person. of the code and makes this exception. javax.el.Propertynotfoundexception: /dependant.xhtml @68,66 itemValue="#{driver.id}": Property 'id' not found on type model.Driver

  • 1

    Include the class Motorista in your question. Very strange behavior. If you read a list of drivers and assign each item to a variable driver, then it should not give error.

  • There, I edited there.

  • The weirdest thing about Weslley is the system freezes and gives me no action. Because it is the following picture of a dependent class being instantiated and me linking a driver to the dependent created, I do this and then record the dependent with the driver bound. He won’t give me one error message, he won’t tell me if he made the bond and he didn’t record himself in the bank. In short, it looks like I’m clicking button without action.

  • @Robinhogomesjunior in his class Pessoa which parameter is the key?

  • Primary key? is Integer id.

  • Your class Pessoa is abstract?

  • Yes, it is abstract.

Show 4 more comments

Browser other questions tagged

You are not signed in. Login or sign up in order to post.