Error in Facesconverter with variable type Date

Asked

Viewed 47 times

0

I am getting the following error while running a web project: java.lang.Classcastexception: java.sql/java.sql.Date cannot be cast to br.faraway.Nicholas.converter.Sampleentity

My page on which I call the Facesconverter:

<p:dialog widgetVar="downExcelFaturas" appendTo="@(body)" modal="true"
        resizable="false" draggable="false" header="Filtrar Faturas"
        responsive="true">
        <h:form style="font-size:14px" id="formFatura">
            <h:panelGrid cellpadding="3">

                <p:outputLabel value="Data:" for="listaData" />
                <p:selectOneMenu value="#{MBFatura.fatura.dataEmissaoFatura}"
                    filter="true" required="true" id="listaData"
                    requiredMessage="Validação:Data é necessaria!"
                    converter="converter">
                    <f:selectItem itemValue="" itemLabel="Selecione uma Data" />
                    <f:selectItems value="#{MBFatura.comboData}" var="fatura"
                        itemValue="#{fatura.dataEmissaoFatura}"
                        itemLabel="#{fatura.dataEmissaoFatura}">

                    </f:selectItems>

                    <f:ajax listener="#{MBFatura.recebeMaior}" />
                </p:selectOneMenu>



                <p:outputLabel value="Até Data:" for="dataFinal" />
                <p:selectOneMenu value="#{MBFatura.fatura.dataEmissaoFatura}"
                    filter="true" required="true" id="dataFinal"
                    requiredMessage="Validação:Data é necessaria!" converter="converter">
                    <f:selectItem itemValue="" itemLabel="Selecione uma Data" />
                    <f:selectItems value="#{MBFatura.comboData}" var="fatura"
                        itemValue="#{fatura.dataEmissaoFatura}"
                        itemLabel="#{fatura.dataEmissaoFatura}">
                    </f:selectItems>
                    <f:ajax listener="#{MBFatura.recebeMenor}" />
                </p:selectOneMenu>
                <font></font>




                <p:outputLabel value="CNPJ:" for="listaCnpj" />
                <p:selectOneMenu value="#{MBFatura.fatura.cnpj}" filter="true"
                    required="true" id="listaCnpj"
                    requiredMessage="Validação:CNPJ é necessaria!">
                    <f:selectItem itemValue="" itemLabel="Selecione um CNPJ" />
                    <f:selectItems value="#{MBFatura.comboCnpj}" var="fatura"
                        itemValue="#{fatura.cnpj}" itemLabel="#{fatura.cnpj}">

                    </f:selectItems>

                </p:selectOneMenu>

                <p:commandButton value="Download excel-faturas"
                    oncomplete="PF('downExcel').hide();"
                    actionListener="#{MBFatura.expExcel}" icon="fa fa-fw fa-download"
                    onclick="PF('pb').start();" update=":msgGlobal" ajax="false" />


            </h:panelGrid>
        </h:form>
    </p:dialog>

Class Facesconvert:

package br.faraway.nicholas.converter;

import java.util.Map;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

@javax.faces.convert.FacesConverter("converter")
public class FacesConverter implements Converter {


    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        if (value != null) {
            return this.getAttributesFrom(component).get(value);
        }
        return null;
    }

    public String getAsString(FacesContext ctx, UIComponent component, Object value) {

        if (value != null && !"".equals(value)) {

            SampleEntity entity = (SampleEntity) value;

            // adiciona item como atributo do componente
            this.addAttribute(component, entity);

            Long codigo = entity.getId();
            if (codigo != null) {
                return String.valueOf(codigo);
            }
        }

        return (String) value;
    }

    protected void addAttribute(UIComponent component, SampleEntity o) {
        String key = o.getId().toString(); // codigo da empresa como chave neste caso
        this.getAttributesFrom(component).put(key, o);
    }

    protected Map<String, Object> getAttributesFrom(UIComponent component) {
        return component.getAttributes();
    }

}

My Sampleentity interface:

package br.faraway.nicholas.converter;

public interface SampleEntity {


    Long getId();

}

My pojo class that implements the Sampleentity interface:

package br.faraway.nicholas.pojo;



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.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.faraway.nicholas.converter.SampleEntity;

@Entity
//@Table(name = "ph161169_fatura_pagar", schema = "ph161169_auditoria_edi")
@Table(name = "fatura_pagar", schema = "auditoria_edi")
public class FaturaPagar implements SampleEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "identificador_registro", length = 3, nullable = true)
    private String identificadorRegistro;

    @Column(name = "identificacao_remetente", length = 35, nullable = true)
    private String identificacaoRemetente;

    @Column(name = "identificacao_destinatario", length = 35, nullable = true)
    private String identificacaoDestinatario;

    @Temporal(TemporalType.DATE)
    @Column(name = "data")
    private Date data;

    @Temporal(TemporalType.TIME)
    @Column(name = "hora", length = 4, nullable = true)
    private Date hora;

    @Column(name = "identificacao_intercambio", length = 12, nullable = true)
    private String identificacaoIntercambio;

    @Column(name = "identificacao_documento", length = 14, nullable = true)
    private String identificacaoDocumento;

    @Column(name = "cnpj", length = 20, nullable = true)
    private String cnpj;

    @Column(name = "filial_emissora_documento", length = 10, nullable = true)
    private String filialEmissoraDocumento;

    @Column(name = "tipo_documento_cobranca", length = 10, nullable = true)
    private String tipoDocumentoCobranca;

    @Column(name = "numero_documento_cobranca", nullable = true)
    private Integer numeroDocumentoCobranca;

    @Temporal(TemporalType.DATE)
    @Column(name = "data_emissao_fatura")
    private Date dataEmissaoFatura;

    @Temporal(TemporalType.DATE)
    @Column(name = "data_vencimento_fatura")
    private Date dataVencimentoFatura;

    @Column(name = "valor_total_documento_cobranca", length = 15, nullable = true)
    private String valorTotalDocumentoCobranca;

    @Column(name = "tipo_cobranca", length = 10, nullable = true)
    private String tipoCobranca;

    @Column(name = "numero_conhecimento", nullable = true)
    private Integer numeroConhecimento;

    @Column(name = "conhecimento_devolucao", length = 1, nullable = true)
    private String conhecimentoDevolucao;

    @Column(name = "qtdade_total_doctos", length = 4, nullable = true)
    private String qtdadeTotalDoctos;

    @Column(name = "valor_frete", nullable = true)
    private String valorFrete;

    @Column(name = "serie_conhecimento", length = 5, nullable = true)
    private String serieConhecimento;
//  @ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.ALL })
//  @JoinColumn(name = "ocorrencias_entrega_id")
    // private OcorrenciaEntrega ocorrenciaEntrega;

    public FaturaPagar() {
        // TODO Auto-generated constructor stub
    }

    public FaturaPagar(Long id, String identificadorRegistro, String identificadorRemetente,
            String identificadorDestinatario, Date data, Date hora, String identificacaoIntercambio,
            String identificacaoDocumento, String cnpj, String tipoDocumentoCobranca, Integer numeroDocumentoCobranca,
            Date dataEmissaoFatura, Date dataVencimentoFatura, String valorTotalDocumentoCobranca, String tipoCobranca,
            String filialEmissoraDocumento, String serieConhecimento, Integer numeroConhecimento, String valorFrete,
            String conhecimentoDevolucao, String qtdadeTotalDoctos) {
        this.id = id;
        this.identificadorRegistro = identificadorRegistro;
        this.identificacaoRemetente = identificadorRemetente;
        this.identificacaoDestinatario = identificadorDestinatario;
        this.data = data;
        this.hora = hora;
        this.identificacaoIntercambio = identificacaoIntercambio;
        this.identificacaoDocumento = identificacaoDocumento;
        this.cnpj = cnpj;
        this.filialEmissoraDocumento = filialEmissoraDocumento;
        this.tipoDocumentoCobranca = tipoDocumentoCobranca;
        this.numeroDocumentoCobranca = numeroDocumentoCobranca;
        this.dataEmissaoFatura = dataEmissaoFatura;
        this.dataVencimentoFatura = dataVencimentoFatura;
        this.valorTotalDocumentoCobranca = valorTotalDocumentoCobranca;
        this.tipoCobranca = tipoCobranca;
        this.numeroConhecimento = numeroConhecimento;
        this.conhecimentoDevolucao = conhecimentoDevolucao;
        this.qtdadeTotalDoctos = qtdadeTotalDoctos;
        this.valorFrete = valorFrete;
        this.conhecimentoDevolucao = conhecimentoDevolucao;
        this.serieConhecimento = serieConhecimento;

    }

    public Long getId() {
        return id;
    }

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

    public String getIdentificadorRegistro() {
        return identificadorRegistro;
    }

    public void setIdentificadorRegistro(String identificadorRegistro) {
        this.identificadorRegistro = identificadorRegistro;
    }

    public String getIdentificacaoRemetente() {
        return identificacaoRemetente;
    }

    public void setIdentificacaoRemetente(String identificacaoRemetente) {
        this.identificacaoRemetente = identificacaoRemetente;
    }

    public String getIdentificacaoDestinatario() {
        return identificacaoDestinatario;
    }

    public void setIdentificacaoDestinatario(String identificacaoDestinatario) {
        this.identificacaoDestinatario = identificacaoDestinatario;
    }

    public Date getData() {
        return data;
    }

    public void setData(Date data) {
        this.data = data;
    }

    public Date getHora() {
        return hora;
    }

    public void setHora(Date hora) {
        this.hora = hora;
    }

    public String getIdentificacaoIntercambio() {
        return identificacaoIntercambio;
    }

    public void setIdentificacaoIntercambio(String identificacaoIntercambio) {
        this.identificacaoIntercambio = identificacaoIntercambio;
    }

    public String getIdentificacaoDocumento() {
        return identificacaoDocumento;
    }

    public void setIdentificacaoDocumento(String identificacaoDocumento) {
        this.identificacaoDocumento = identificacaoDocumento;
    }

    public String getCnpj() {
        return cnpj;
    }

    public void setCnpj(String cnpj) {
        this.cnpj = cnpj;
    }

    public String getFilialEmissoraDocumento() {
        return filialEmissoraDocumento;
    }

    public void setFilialEmissoraDocumento(String filialEmissoraDocumento) {
        this.filialEmissoraDocumento = filialEmissoraDocumento;
    }

    public String getTipoDocumentoCobranca() {
        return tipoDocumentoCobranca;
    }

    public void setTipoDocumentoCobranca(String tipoDocumentoCobranca) {
        this.tipoDocumentoCobranca = tipoDocumentoCobranca;
    }

    public Integer getNumeroDocumentoCobranca() {
        return numeroDocumentoCobranca;
    }

    public void setNumeroDocumentoCobranca(Integer numeroDocumentoCobranca) {
        this.numeroDocumentoCobranca = numeroDocumentoCobranca;
    }

    public Date getDataEmissaoFatura() {
        return dataEmissaoFatura;
    }

    public void setDataEmissaoFatura(Date dataEmissaoFatura) {
        this.dataEmissaoFatura = dataEmissaoFatura;
    }

    public Date getDataVencimentoFatura() {
        return dataVencimentoFatura;
    }

    public void setDataVencimentoFatura(Date dataVencimentoFatura) {
        this.dataVencimentoFatura = dataVencimentoFatura;
    }

    public String getValorTotalDocumentoCobranca() {
        return valorTotalDocumentoCobranca;
    }

    public void setValorTotalDocumentoCobranca(String valorTotalDocumentoCobranca) {
        this.valorTotalDocumentoCobranca = valorTotalDocumentoCobranca;
    }

    public String getTipoCobranca() {
        return tipoCobranca;
    }

    public void setTipoCobranca(String tipoCobranca) {
        this.tipoCobranca = tipoCobranca;
    }

    public Integer getNumeroConhecimento() {
        return numeroConhecimento;
    }

    public void setNumeroConhecimento(Integer numeroConhecimento) {
        this.numeroConhecimento = numeroConhecimento;
    }

    public String getConhecimentoDevolucao() {
        return conhecimentoDevolucao;
    }

    public void setConhecimentoDevolucao(String conhecimentoDevolucao) {
        this.conhecimentoDevolucao = conhecimentoDevolucao;
    }

    public String getQtdadeTotalDoctos() {
        return qtdadeTotalDoctos;
    }

    public void setQtdadeTotalDoctos(String qtdadeTotalDoctos) {
        this.qtdadeTotalDoctos = qtdadeTotalDoctos;
    }

    public String getValorFrete() {
        return valorFrete;
    }

    public void setValorFrete(String valorFrete) {
        this.valorFrete = valorFrete;
    }

    public String getSerieConhecimento() {
        return serieConhecimento;
    }

    public void setSerieConhecimento(String serieConhecimento) {
        this.serieConhecimento = serieConhecimento;
    }

}

1 answer

0

Your method getAsString received a value of the type java.sql.Date and you tried a cast to SimpleEntity.

The getAsObject receives in value the date in string form and expects to be returned an object of type Date, which you will get by parsing the received string, with Simpledateformat, for example.

The getAsString is the opposite way. Receives in value a Date object and expects to return a formatted Date string received.

Convert only takes values and returns conversions.

Below, your class’s Refactoring convert:

package br.faraway.nicholas.converter;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;

@javax.faces.convert.FacesConverter("converter")
public class FacesConverter implements Converter {

    public Object getAsObject(FacesContext ctx, UIComponent component, String value) {
        if (value != null) {
            return new SimpleDateFormat("dd/MM/yyyy").parse(value);
        }
        return null;
    }

    public String getAsString(FacesContext ctx, UIComponent component, Object value) {
        if (value != null) {
           return new SimpleDateFormat("dd/MM/yyyy").format((Date) value);
        }
        return null;
    }

}
  • Thank you for the reply!

Browser other questions tagged

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