Erro ao gravar List no banco de dados

Java

17/04/2015

Olá pessoal,

Tenho a entidade PlanoContas e a entidade Conta, onde a entidade PlanoContas possui inúmeras contas relacionadas, para relacionar as contas estou usando um List, porém no momento de gravar esta retornando o erro abaixo, creio que meu problema esteja na classe ContasConverter, mas preciso de ajuda para identificar e ajustar o problema.

Erro:
value="#{planoContasControle.objeto.conta}": Cannot convert beans.Conta@20 of type class beans.Conta to interface java.util.List

Abaixo segue meu código...

Bean PlanoContas
======================================================================
package beans;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

@Entity
public class PlanoContas implements Serializable {

@Id
@SequenceGenerator(name = "PlanoId", allocationSize = 1, sequenceName = "PlanoId")
@GeneratedValue(generator = "PlanoId", strategy = GenerationType.AUTO)
private Integer id;

@NotNull(message = "O campo Código deve ser preenchido")
@Column(length = 12, nullable = false)
private String numero;

@NotNull(message = "O campo descrição deve ser preenchido")
@Column(length = 60, nullable = false)
private String descricao;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de inicio da validade")
@Column(name = "inicioValidade")
private Date inicioValidade;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de fim da validade")
@Column(name = "fimValidade")
private Date fimValidade;

@ManyToOne
private CentroCusto centroCusto;

@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
private List<Conta> conta;


private static final long serialVersionUID = 1L;

public PlanoContas() {
super();
}

public static long getSerialversionuid() {
return serialVersionUID;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getNumero() {
return numero;
}

public void setNumero(String numero) {
this.numero = numero;
}

public String getDescricao() {
return descricao;
}

public void setDescricao(String descricao) {
this.descricao = descricao;
}

public Date getInicioValidade() {
return inicioValidade;
}

public void setInicioValidade(Date inicioValidade) {
this.inicioValidade = inicioValidade;
}

public Date getFimValidade() {
return fimValidade;
}

public void setFimValidade(Date fimValidade) {
this.fimValidade = fimValidade;
}

public CentroCusto getCentroCusto() {
return centroCusto;
}

public void setCentroCusto(CentroCusto centroCusto) {
this.centroCusto = centroCusto;
}

public List<Conta> getConta() {
return conta;
}

public void setConta(List<Conta> conta) {
this.conta = conta;
}


@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.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;
}
PlanoContas other = (PlanoContas) obj;
if (id == null) {
if (other.id != null) {
return false;
}
} else if (!id.equals(other.id)) {
return false;
}
return true;
}
}
======================================================================

Bean Canta
======================================================================
package beans;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.constraints.NotNull;


@Entity
public class Conta implements Serializable {

@Id
@SequenceGenerator(name = "ContaId", allocationSize = 1, sequenceName = "ContaId")
@GeneratedValue(generator = "ContaId", strategy = GenerationType.AUTO)
private Integer id;

@NotNull(message = "O campo numero deve ser preenchido")
@Column(length = 16, nullable = false)
private String numero;

@NotNull(message = "O campo descrição deve ser preenchido")
@Column(length = 60, nullable = false)
private String descricao;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de inicio da validade")
@Column(name = "inicioValidade")
private Date inicioValidade;

@Temporal(javax.persistence.TemporalType.TIMESTAMP)
@NotNull(message = "Informe a data de fim da validade")
@Column(name = "fimValidade")
private Date fimValidade;

@NotNull(message = "O campo tipo deve ser preenchido")
@Column(length = 8, nullable = false)
private String tipo;


private static final long serialVersionUID = 1L;

public Conta() {
super();
}

public static long getSerialversionuid() {
return serialVersionUID;
}

public Integer getId() {
return id;
}

public void setId(Integer id) {
this.id = id;
}

public String getNumero() {
return numero;
}

public void setNumero(String numero) {
this.numero = numero;
}

public String getDescricao() {
return descricao;
}

public void setDescricao(String descricao) {
this.descricao = descricao;
}

public Date getInicioValidade() {
return inicioValidade;
}

public void setInicioValidade(Date inicioValidade) {
this.inicioValidade = inicioValidade;
}

public Date getFimValidade() {
return fimValidade;
}

public void setFimValidade(Date fimValidade) {
this.fimValidade = fimValidade;
}

public String getTipo() {
return tipo;
}

public void setTipo(String tipo) {
this.tipo = tipo;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.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;
Conta other = (Conta) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
return true;
}


}
======================================================================

Minha View
======================================================================
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR...nsitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html" encoding="ISO-8859-1">
<h:head>
<h:outputScript name="calendario_pt_BR.js" library="js" />
<style type="text/css">
.ui-layout-north {
z-index: 20 !important;
overflow: visible !important;;
}

.ui-layout-north .ui-layout-unit-content {
overflow: visible !important;
}
.ui-widget,
.ui-widget .ui-widget {
font-size: 14px !important;
}
.ui-panelgrid td, .ui-panelgrid tr{

border-style: none !important
}

</style>
<f:facet name="first">
<meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
<title>Plano de Contas</title>
</f:facet>
</h:head>

<h:form>
<p:growl id="growlMessages"/>
<p:panelGrid columns="10" >
<f:facet name="header">
<h:outputText value="Edição de Plano de Contas"/>
</f:facet>
<p:outputLabel value="Número:" for="numero"/>
<p:inputText size="10" maxlength="12" id="numero" value="#{planoContasControle.objeto.numero}" title="Número do Plano de Contas" required="true"/>
<p:outputLabel value="Descrição:" for="descricao" />
<p:inputText size="30" maxlength="60" id="descricao" value="#{planoContasControle.objeto.descricao}" title="Descrição" required="true"/>
<p:outputLabel value="Inicio Validade:" for="iniciovalidade" />
<p:calendar id="iniciovalidade" size="12" value="#{planoContasControle.objeto.inicioValidade}" title="Inicio da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
<p:outputLabel value="Fim Validade:" for="fimvalidade" />
<p:calendar id="fimvalidade" size="12" value="#{planoContasControle.objeto.fimValidade}" title="Fim da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
<p:outputLabel value="Centro Custo:" for="CentroCusto" />
<p:column headerText="CentroCusto" style="text-align: center; width: 100px">
<p:autoComplete id="CentroCusto" style="width:180px"
dropdown="true" multiple="false" forceSelection="true" var="obj"
itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#"
value="#{planoContasControle.objeto.centroCusto}"
converter="#{planoContasControle.centroCustoConverter}"
completeMethod="#{planoContasControle.completeCentro(query)}" title="Conta"/>
</p:column>
</p:panelGrid>
<p:separator/>
<p:outputLabel value="Adicionar Contas"/>
<p:dataTable id="itens" var="item" value="#{planoContasControle.linhas}" style="width: 360px" >
<p:column headerText="Contas" style="text-align: center; width: 100px">
<p:commandButton icon="ui-icon-plus" action="#{planoContasControle.adicionarLinhas()}" ajax="false"/>
<p:autoComplete id="Conta" style="width:180px"
dropdown="true" multiple="false" forceSelection="true" var="obj"
itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#"
value="#{planoContasControle.objeto.conta}"
converter="#{planoContasControle.contaConverter}"
completeMethod="#{planoContasControle.completeConta(query)}" title="Conta"/>
</p:column>
<p:column style="text-align: center; width: 30px">
<p:commandButton icon="ui-icon-trash" action="#{planoContasControle.removerLinhas(item)}" ajax="false"/>
</p:column>
<f:facet name="footer">
<div align="left">
<p:commandButton action="#{planoContasControle.gravar()}" value="Salvar" ajax="false"/>
<p:commandButton value="Cancelar" action="#{planoContasControle.cancelar()}" immediate="true" ajax="false" />
</div>
</f:facet>
</p:dataTable>
</h:form>
</f:view>
</html>
======================================================================

Minha controler PlanoContasControle
======================================================================
package Controler;

import beans.CentroCusto;
import beans.Conta;
import beans.PlanoContas;
import conexao.GerarEntityManager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import Converter.CentroCustoConverter;
import Converter.ContaConverter;
import java.util.ArrayList;

@ManagedBean(name="planoContasControle")
@SessionScoped
public class PlanoContasControle {

private List<PlanoContas> lista;
private List<Conta> listaConta;
private EntityManager em;
private PlanoContas objeto;
private CentroCustoConverter centroCustoConverter = new CentroCustoConverter();
private ContaConverter contaConverter = new ContaConverter();
private String ordemAtual = "id";
private Map<String, String> listaOrdem = new HashMap<String, String>();
List<Integer> linhas;


public PlanoContasControle() {
super();
listaOrdem.put("Descricao", "descricao");
listaOrdem.put("Código", "id");
linhas = new ArrayList<>();
linhas.add(1);
em = GerarEntityManager.getInstance().getEntityManager();
}
public List<Integer> getLinhas() {
return linhas;
}

public void adicionarLinhas() {
linhas.add(1);
}
public void removerLinhas(int indice) {
linhas.remove(indice);
}


public String incluir() {
objeto = new PlanoContas();
return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
}

public String atualizar() {
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
}
public List<PlanoContas> getLista() {
em = GerarEntityManager.getInstance().getEntityManager();
String jpql = "select p from PlanoContas p order by p." + ordemAtual;
lista = em.createQuery(jpql).getResultList();
em.close();
return lista;

}

public List<Conta> getListaConta() {
em = GerarEntityManager.getInstance().getEntityManager();
String jpql = "select c from Conta c";
listaConta = em.createQuery(jpql).getResultList();
em.close();
return listaConta;

}


public String gravar() {

em = GerarEntityManager.getInstance().getEntityManager();
em.getTransaction().begin();

if (objeto.getId() == null) {
em.persist(objeto);
} else {
em.merge(objeto);
}
em.getTransaction().commit();
//objeto = new PlanoContas();
return "";
}

public String alterar(Integer id) {
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.close();
return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
}

public String IncluirContas(Integer id) {
//objetoContas = new ContasPlano();
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.close();
return "/faces/Tarefas/PlanoContas/CAD_ContasPlano.xhtml";
}

public List<CentroCusto> completeCentro(String query) {
em = GerarEntityManager.getInstance().getEntityManager();
List<CentroCusto> results = em.createQuery(
"select c from CentroCusto c where upper(c.numero) like "
+ "'" + query.trim().toUpperCase() + "%' "
+ "order by c.numero").getResultList();
return results;
}
public List<Conta> completeConta(String query) {
em = GerarEntityManager.getInstance().getEntityManager();
List<Conta> results = em.createQuery(
"select c from Conta c where upper(c.numero) like "
+ "'" + query.trim().toUpperCase() + "%' "
+ "order by c.numero").getResultList();
return results;
}

public String excluir(Integer id) {
try {
em = GerarEntityManager.getInstance().getEntityManager();
objeto = em.find(PlanoContas.class, id);
em.getTransaction().begin();
em.remove(objeto);
em.getTransaction().commit();
em.close();
} catch (Exception e) {
FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Registro não pode ser excluído, existem relacionamentos ativos!", "");
FacesContext.getCurrentInstance().addMessage(null, mensagem);

}
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";

}

public String cancelar() {
return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
}

public EntityManager getEm() {
return em;
}

public void setEm(EntityManager em) {
this.em = em;
}

public PlanoContas getObjeto() {
return objeto;
}

public void setObjeto(PlanoContas objeto) {
this.objeto = objeto;
}

public CentroCustoConverter getCentroCustoConverter() {
return centroCustoConverter;
}

public void setCentroCustoConverter(CentroCustoConverter centroCustoConverter) {
this.centroCustoConverter = centroCustoConverter;
}

public ContaConverter getContaConverter() {
return contaConverter;
}

public void setContaConverter(ContaConverter contaConverter) {
this.contaConverter = contaConverter;
}

public String getOrdemAtual() {
return ordemAtual;
}

public void setOrdemAtual(String ordemAtual) {
this.ordemAtual = ordemAtual;
}

public Map<String, String> getListaOrdem() {
return listaOrdem;
}

public void setListaOrdem(Map<String, String> listaOrdem) {
this.listaOrdem = listaOrdem;
}


}
======================================================================

Minha Converter ContaConverter
======================================================================
package Converter;

import beans.Conta;
import conexao.EntityManagerUtil;
import java.io.Serializable;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

public class ContaConverter implements Serializable, Converter {
@Override
public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
if (string == null) {
return null;
}
return EntityManagerUtil.getEntityManager().find(Conta.class, Integer.parseInt(string));

}


@Override
public String getAsString(FacesContext fc, UIComponent uic, Object o) {
if (o == null) {
return null;
}
Conta obj = (Conta) o;
return obj.getId().toString();
}

}
======================================================================


Desde já agradeço caso alguém possa me dar uma ajuda
Geovir Gayeski

Geovir Gayeski

Curtidas 0

Respostas

Randrade

Randrade

17/04/2015

Por favor, utilize a tag [code] para podermos visualizar seu código melhor.
GOSTEI 0
Geovir Gayeski

Geovir Gayeski

17/04/2015

Segue código formatado....

Bean PlanoContas

package beans;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;

@Entity
public class PlanoContas implements Serializable {

    @Id
    @SequenceGenerator(name = "PlanoId", allocationSize = 1, sequenceName = "PlanoId")
    @GeneratedValue(generator = "PlanoId", strategy = GenerationType.AUTO)
    private Integer id;

    @NotNull(message = "O campo Código deve ser preenchido")
    @Column(length = 12, nullable = false)
    private String numero;

    @NotNull(message = "O campo descrição deve ser preenchido")
    @Column(length = 60, nullable = false)
    private String descricao;

    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @NotNull(message = "Informe a data de inicio da validade")
    @Column(name = "inicioValidade")
    private Date inicioValidade;

    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @NotNull(message = "Informe a data de fim da validade")
    @Column(name = "fimValidade")
    private Date fimValidade;

    @ManyToOne
    private CentroCusto centroCusto;

    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    private List<Conta> conta;


    private static final long serialVersionUID = 1L;

    public PlanoContas() {
        super();
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getInicioValidade() {
        return inicioValidade;
    }

    public void setInicioValidade(Date inicioValidade) {
        this.inicioValidade = inicioValidade;
    }

    public Date getFimValidade() {
        return fimValidade;
    }

    public void setFimValidade(Date fimValidade) {
        this.fimValidade = fimValidade;
    }

    public CentroCusto getCentroCusto() {
        return centroCusto;
    }

    public void setCentroCusto(CentroCusto centroCusto) {
        this.centroCusto = centroCusto;
    }

    public List<Conta> getConta() {
        return conta;
    }

    public void setConta(List<Conta> conta) {
        this.conta = conta;
    }

    
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.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;
        }
        PlanoContas other = (PlanoContas) obj;
        if (id == null) {
            if (other.id != null) {
                return false;
            }
        } else if (!id.equals(other.id)) {
            return false;
        }
        return true;
    }
}


Bean Conta
package beans;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.validation.constraints.NotNull;


@Entity
public class Conta implements Serializable {

    @Id
    @SequenceGenerator(name = "ContaId", allocationSize = 1, sequenceName = "ContaId")
    @GeneratedValue(generator = "ContaId", strategy = GenerationType.AUTO)
    private Integer id;

    @NotNull(message = "O campo numero deve ser preenchido")
    @Column(length = 16, nullable = false)
    private String numero;

    @NotNull(message = "O campo descrição deve ser preenchido")
    @Column(length = 60, nullable = false)
    private String descricao;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @NotNull(message = "Informe a data de inicio da validade")
    @Column(name = "inicioValidade")
    private Date inicioValidade;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @NotNull(message = "Informe a data de fim da validade")
    @Column(name = "fimValidade")
    private Date fimValidade;

    @NotNull(message = "O campo tipo deve ser preenchido")
    @Column(length = 8, nullable = false)
    private String tipo;


    private static final long serialVersionUID = 1L;
    
    public Conta() {
        super();
    }
    
    public static long getSerialversionuid() {
		return serialVersionUID;
	}

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getInicioValidade() {
        return inicioValidade;
    }

    public void setInicioValidade(Date inicioValidade) {
        this.inicioValidade = inicioValidade;
    }

    public Date getFimValidade() {
        return fimValidade;
    }

    public void setFimValidade(Date fimValidade) {
        this.fimValidade = fimValidade;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
 
    @Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.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;
		Conta other = (Conta) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}

    
}


Minha View
<?xml version='1.0' encoding='UTF-8' ?>
<!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://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.org/ui">
    <f:view contentType="text/html" encoding="ISO-8859-1">
        <h:head>
            <h:outputScript name="calendario_pt_BR.js" library="js" />
            <style type="text/css">
                .ui-layout-north {
                    z-index: 20 !important;
                    overflow: visible !important;;
                }

                .ui-layout-north .ui-layout-unit-content {
                    overflow: visible !important;
                }
                .ui-widget,   
                .ui-widget .ui-widget {   
                    font-size: 14px !important;   
                }  
                .ui-panelgrid td, .ui-panelgrid tr{

                    border-style: none !important
                }

            </style>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type" />
                <title>Plano de Contas</title>
            </f:facet>
        </h:head>

        <h:form>
            <p:growl id="growlMessages"/>
            <p:panelGrid columns="10" >
                <f:facet name="header">
                    <h:outputText value="Edição de Plano de Contas"/>
                </f:facet>
                <p:outputLabel value="Número:" for="numero"/>
                <p:inputText size="10" maxlength="12" id="numero"  value="#{planoContasControle.objeto.numero}" title="Número do Plano de Contas" required="true"/>
                <p:outputLabel value="Descrição:" for="descricao" />
                <p:inputText size="30" maxlength="60" id="descricao" value="#{planoContasControle.objeto.descricao}" title="Descrição" required="true"/>
                <p:outputLabel value="Inicio Validade:" for="iniciovalidade" />
                <p:calendar id="iniciovalidade" size="12" value="#{planoContasControle.objeto.inicioValidade}" title="Inicio da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
                <p:outputLabel value="Fim Validade:" for="fimvalidade" />
                <p:calendar id="fimvalidade" size="12" value="#{planoContasControle.objeto.fimValidade}" title="Fim da validade do plano" locale="pt_BR" pattern="dd/MM/yyyy" showOn="button" timeZone="America/Sao_Paulo" />
                <p:outputLabel value="Centro Custo:" for="CentroCusto" />
                <p:column headerText="CentroCusto" style="text-align: center; width: 100px">                     
                    <p:autoComplete id="CentroCusto" style="width:180px" 
                                    dropdown="true" multiple="false" forceSelection="true" var="obj"
                                    itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#"
                                    value="#{planoContasControle.objeto.centroCusto}"
                                    converter="#{planoContasControle.centroCustoConverter}"
                                    completeMethod="#{planoContasControle.completeCentro(query)}" title="Conta"/>           
                </p:column>
            </p:panelGrid>
            <p:separator/>
            <p:outputLabel value="Adicionar Contas"/>
            <p:dataTable id="itens" var="item" value="#{planoContasControle.linhas}" style="width: 360px" >                     
                <p:column headerText="Contas" style="text-align: center; width: 100px">
                    <p:commandButton icon="ui-icon-plus" action="#{planoContasControle.adicionarLinhas()}" ajax="false"/>
                    <p:autoComplete id="Conta" style="width:180px" 
                                    dropdown="true" multiple="false" forceSelection="true" var="obj"
                                    itemLabel="#{obj.numero} - #{obj.descricao}" itemValue="#"
                                    value="#{planoContasControle.objeto.conta}"
                                    converter="#{planoContasControle.contaConverter}"
                                    completeMethod="#{planoContasControle.completeConta(query)}" title="Conta"/>
                </p:column>
                <p:column style="text-align: center; width: 30px">
                    <p:commandButton icon="ui-icon-trash" action="#{planoContasControle.removerLinhas(item)}" ajax="false"/>     
                </p:column>  
                <f:facet name="footer">
                    <div align="left">
                        <p:commandButton action="#{planoContasControle.gravar()}" value="Salvar" ajax="false"/>
                        <p:commandButton value="Cancelar" action="#{planoContasControle.cancelar()}" immediate="true" ajax="false" />
                    </div>
                </f:facet>
            </p:dataTable>  
        </h:form>
    </f:view>
</html>


Minha controle PlanoContasControle
package Controler;

import beans.CentroCusto;
import beans.Conta;
import beans.PlanoContas;
import conexao.GerarEntityManager;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import Converter.CentroCustoConverter;
import Converter.ContaConverter;
import java.util.ArrayList;

@ManagedBean(name="planoContasControle")
@SessionScoped
public class PlanoContasControle {
    
    private List<PlanoContas> lista;
    private List<Conta> listaConta;
    private EntityManager em;
    private PlanoContas objeto;
    private CentroCustoConverter centroCustoConverter = new CentroCustoConverter();
    private ContaConverter contaConverter = new ContaConverter();
    private String ordemAtual = "id";
    private Map<String, String> listaOrdem = new HashMap<String, String>();
    List<Integer> linhas; 
    
    
    public PlanoContasControle() {
        super();
        listaOrdem.put("Descricao", "descricao");
        listaOrdem.put("Código", "id");
        linhas = new ArrayList<>();  
        linhas.add(1);
        em = GerarEntityManager.getInstance().getEntityManager();
    }
    public List<Integer> getLinhas() {  
        return linhas;  
    }  
      
    public void adicionarLinhas() {       
        linhas.add(1); 
    }  
    public void removerLinhas(int indice) {       
        linhas.remove(indice);        
    } 
    

    public String incluir() {
        objeto = new PlanoContas();
        return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
    }

    public String atualizar() {
        return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
    }
    public List<PlanoContas> getLista() {
        em = GerarEntityManager.getInstance().getEntityManager();
        String jpql = "select p from PlanoContas p order by p." + ordemAtual;
        lista = em.createQuery(jpql).getResultList();
        em.close();
        return lista;

    }
    
    public List<Conta> getListaConta() {
        em = GerarEntityManager.getInstance().getEntityManager();
        String jpql = "select c from Conta c";
        listaConta = em.createQuery(jpql).getResultList();
        em.close();
        return listaConta;

    }


     public String gravar() {
         
        em = GerarEntityManager.getInstance().getEntityManager();
        em.getTransaction().begin();
        
        if (objeto.getId() == null) {
            em.persist(objeto);
        } else {
            em.merge(objeto);
        }
        em.getTransaction().commit();
        //objeto = new PlanoContas();
        return "";
    }
    
    public String alterar(Integer id) {
        em = GerarEntityManager.getInstance().getEntityManager();
        objeto = em.find(PlanoContas.class, id);
        em.close();
        return "/faces/Cadastros/PlanoContas/CAD_Plano.xhtml";
    }
    
    public String IncluirContas(Integer id) {
        //objetoContas = new ContasPlano();
        em = GerarEntityManager.getInstance().getEntityManager();
        objeto = em.find(PlanoContas.class, id);
        em.close();
        return "/faces/Tarefas/PlanoContas/CAD_ContasPlano.xhtml";
    }
    
    public List<CentroCusto> completeCentro(String query) {
        em = GerarEntityManager.getInstance().getEntityManager();
        List<CentroCusto> results = em.createQuery(
                "select c from CentroCusto c where upper(c.numero) like "
                + "'" + query.trim().toUpperCase() + "%' "
                + "order by c.numero").getResultList();
        return results;
    }
    public List<Conta> completeConta(String query) {
        em = GerarEntityManager.getInstance().getEntityManager();
        List<Conta> results = em.createQuery(
                "select c from Conta c where upper(c.numero) like "
                + "'" + query.trim().toUpperCase() + "%' "
                + "order by c.numero").getResultList();
        return results;
    }

    public String excluir(Integer id) {
        try {
            em = GerarEntityManager.getInstance().getEntityManager();
            objeto = em.find(PlanoContas.class, id);
            em.getTransaction().begin();
            em.remove(objeto);
            em.getTransaction().commit();
            em.close();
        } catch (Exception e) {
            FacesMessage mensagem = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Registro não pode ser excluído, existem relacionamentos ativos!", "");
            FacesContext.getCurrentInstance().addMessage(null, mensagem);

        }
        return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";

    }

    public String cancelar() {
        return "/faces/Consultas/PlanoContas/LIST_Plano.xhtml";
    }

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    public PlanoContas getObjeto() {
        return objeto;
    }

    public void setObjeto(PlanoContas objeto) {
        this.objeto = objeto;
    }

    public CentroCustoConverter getCentroCustoConverter() {
        return centroCustoConverter;
    }

    public void setCentroCustoConverter(CentroCustoConverter centroCustoConverter) {
        this.centroCustoConverter = centroCustoConverter;
    }

    public ContaConverter getContaConverter() {
        return contaConverter;
    }

    public void setContaConverter(ContaConverter contaConverter) {
        this.contaConverter = contaConverter;
    }

    public String getOrdemAtual() {
        return ordemAtual;
    }

    public void setOrdemAtual(String ordemAtual) {
        this.ordemAtual = ordemAtual;
    }

    public Map<String, String> getListaOrdem() {
        return listaOrdem;
    }

    public void setListaOrdem(Map<String, String> listaOrdem) {
        this.listaOrdem = listaOrdem;
    }
    

}


Minha Converter ContaConverter
package Converter;

import beans.Conta;
import conexao.EntityManagerUtil;
import java.io.Serializable;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

public class ContaConverter implements Serializable, Converter {
    @Override
    public Object getAsObject(FacesContext fc, UIComponent uic, String string) {
        if (string == null) {
            return null;
        }
        return EntityManagerUtil.getEntityManager().find(Conta.class, Integer.parseInt(string));

    }


    @Override
    public String getAsString(FacesContext fc, UIComponent uic, Object o) {
        if (o == null) {
            return null;
        }
        Conta obj = (Conta) o;
        return obj.getId().toString();
    }

}
GOSTEI 0
Ronaldo Lanhellas

Ronaldo Lanhellas

17/04/2015

Antes de você tentar salvar depure seu código e mostre onde exatamente o problema está ocorrendo. Pois é evidente que você está tentando converter um objeto Conta para um List.
GOSTEI 0
João Cabral

João Cabral

17/04/2015

Onde você configurou o seu Converter?

Adicionou ele nos arquivos xml de configuração? Vou recomendar (em caso negativo) a anotação

@FacesConverter(forClass = Conta.class) 
GOSTEI 0
POSTAR