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

Galera como fazer uma gereção automatica de parcelas?

Como fazer geração de parcelas automatica no java? obrigado.

34 respostas

Oi Alisson, tudo bem ?

Cara pode ser só um pouquinho mais específico ?

Não entendi muito bem o que você quer fazer :(

Opa bom Matheus? To bem sim, então eu tenho a parte da venda e da compra certo? E tenho um campo quantidade de parcela que vou fazer a minha compra ou venda, depois eu queria algum metodo, não sei nem como começar para gerar minhas parcelas automaticamente atraves da quantidade de parcela escolhida, deu para enteder agora? Obrigado, irei postar minhas tabelas aqui da venda, talvez ajude a entender mais.

@Entity
@SuppressWarnings("serial")
public class Venda implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private Double valorTotal;
    @Temporal(TemporalType.DATE)
    private Calendar dataVenda = Calendar.getInstance();
    @ManyToOne
    @JoinColumn(name = "funcionario_codigo")
    private Funcionario funcionario = new Funcionario();
    @ManyToOne
    @JoinColumn(name = "cliente_codigo")
    private Cliente cliente = new Cliente();
    @ManyToMany
    private List<Produto> produtos = new ArrayList<Produto>();
    @Temporal(TemporalType.DATE)
    private Calendar data = Calendar.getInstance();
    @ManyToMany(fetch = FetchType.LAZY)
    private List<FormaDePagamento> formaDePagamentos = new ArrayList<FormaDePagamento>();
    @OneToMany(mappedBy = "venda", fetch = FetchType.LAZY)
    private List<Parcela> parcelas = new ArrayList<Parcela>();
    private Double valorRestante = 0.0D;
    private Double valorJuros = 0.0D;
@Entity
@SuppressWarnings("serial")
public class Parcela implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @Temporal(TemporalType.DATE)
    private Date dataParcela;
    @Temporal(TemporalType.DATE)
    private Date dataVencimento;
    private Double valorParcela = 0.0D;
    private Double valorPago;
    private boolean status;
    private Integer diasParcela = 0;
    private Integer parcela = 0;
    @ManyToOne
    @JoinColumn(name = "venda_codigo")
    private Venda venda = new Venda();
@Entity
@SuppressWarnings("serial")
public class Venda_produto implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @ManyToOne
    @JoinColumn(name = "Venda_codigo", nullable = false)
    private Venda venda = new Venda();
    @ManyToOne
    @JoinColumn(name = "produtos_codigo", nullable = false)
    private Produto produto = new Produto();
    private Integer quantidade;
@Entity
@SuppressWarnings("serial")
public class Venda_formadepagamento implements Serializable{

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    @ManyToOne
    @JoinColumn(name = "venda_codigo")
    private Venda venda = new Venda();
    @ManyToOne
    @JoinColumn(name = "formaDePagamentos_codigo")
    private FormaDePagamento formaDePagamento = new FormaDePagamento();
    private Double valorDado = 0.0D;
    private Double somaValorDado = 0.0D;

Aguardo atenciosamente. Obrigado

E só lembrando o meu campo quantidade é o campo parcela dentro da tabela parcela kkk

Alisson, tudo bem ?

Entendi o que quer fazer.

Cara eu faria isso da seguinte forma :

  • Com base na quantidade de parcelas eu faria um for para criar cada uma delas

Matheus um for? eu pensei no for e no while amigo, mais não sei como gerar os dias o mes o ano... Estou usando o Date como visto, porque o meu calendar trazia o ano de 2020, e como você pode ver o meu parcela é uma lista certo? Está correto assim né?

Alisson,

Qual versão do Java você tá usando ?

Se for a 8, use por favor o pacote java.time, ele é sensacional.

Sim estou usando a versão 8, ela é boa Matheus? Mais no meu usando o Date poderia fazer também um for ou while para gerar automatico? O meu problema é como gerar os dias e mes e ano automatico kkkk, como exemplo fiz em 2 x gera a primeira daqui um mes e a segunda daqui 2 meses.

Cara com o java.time, você consegue fazer isso, uma mão na roda. Tem uma classe chamada LocalDate : https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html

No seu for :

LocalDate dataParcela = LocalDate.now();
for(){
    parcela.setData(dataParcela);
    // dá para fazer em dias, semanas 
    dataParcela = dataParcela.plusMonths(1); 

}

Matheus você aconselha então eu trocar de Date para LocalDate? No meu html eu tenho que trocar algo?

Coloquei a class que você me falo, e me gerou um erro no html.

<p:calendar id="dataVencimento" locale="pt_BR"
                                                style="max-width:100px" required="true"
                                                requiredMessage="Não é possivel avançar sem colocar a data final da parcela"
                                                value="#{vendaBean.parcela.dataVencimento}">
                                                <f:convertDateTime pattern="dd/MM/yyyy" />
                                            </p:calendar>

Erro

GRAVE: Error Rendering View[/paginas/venda.xhtml]
javax.faces.convert.ConverterException: Data parcela: não foi possível converter '2017-05-23' em uma sequência.
    at javax.faces.convert.DateTimeConverter.getAsString(DateTimeConverter.java:469)
    at org.primefaces.component.calendar.CalendarUtils.getValueAsString(CalendarUtils.java:53)
    at org.primefaces.component.calendar.CalendarRenderer.encodeEnd(CalendarRenderer.java:60)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeGridBody(PanelGridRenderer.java:234)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeGridLayout(PanelGridRenderer.java:90)
    at org.primefaces.component.panelgrid.PanelGridRenderer.encodeEnd(PanelGridRenderer.java:40)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:89)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:72)
    at org.primefaces.component.scrollpanel.ScrollPanelRenderer.encodeMarkup(ScrollPanelRenderer.java:52)
    at org.primefaces.component.scrollpanel.ScrollPanelRenderer.encodeEnd(ScrollPanelRenderer.java:31)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at org.primefaces.component.wizard.WizardRenderer.encodeStep(WizardRenderer.java:80)
    at org.primefaces.component.wizard.WizardRenderer.encodeEnd(WizardRenderer.java:60)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:920)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at com.sun.faces.context.PartialViewContextImpl$PhaseAwareVisitCallback.visit(PartialViewContextImpl.java:582)
    at com.sun.faces.component.visit.PartialVisitContext.invokeVisitCallback(PartialVisitContext.java:183)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIForm.visitTree(UIForm.java:371)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
    at com.sun.faces.context.PartialViewContextImpl.processComponents(PartialViewContextImpl.java:403)
    at com.sun.faces.context.PartialViewContextImpl.processPartial(PartialViewContextImpl.java:322)
    at org.primefaces.context.PrimePartialViewContext.processPartial(PrimePartialViewContext.java:60)
    at javax.faces.context.PartialViewContextWrapper.processPartial(PartialViewContextWrapper.java:219)
    at org.omnifaces.context.OmniPartialViewContext.processPartial(OmniPartialViewContext.java:144)
    at javax.faces.component.UIViewRoot.encodeChildren(UIViewRoot.java:1004)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1856)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:432)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:134)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at org.omnifaces.viewhandler.OmniViewHandler.renderView(OmniViewHandler.java:115)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalArgumentException: Cannot format given Object as a Date
    at java.text.DateFormat.format(Unknown Source)
    at java.text.Format.format(Unknown Source)
    at javax.faces.convert.DateTimeConverter.getAsString(DateTimeConverter.java:462)
    ... 64 more

Erro no meu converter.

Você precisa de um conversor.

https://www.javacodegeeks.com/2015/06/utilizing-the-java-8-date-time-api-with-jsf-and-java-ee-7.html

Esse tutorial te ajuda a criar um, senão me engano no curso de jsf criamos um conversor, mas não para essa classe.

Certo Matheus estou com 2 problemas agora, fiz o converter.

@SuppressWarnings("serial")
@FacesConverter("dataConverter")
public class DataConverter implements Serializable, Converter{

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        return LocalDate.parse(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        LocalDate dataValor = (LocalDate) value;
        return dataValor.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
    }

}

Depois deixei

<p:outputLabel value="Data parcela: " for="dataParcela" />
                                            <p:calendar id="dataParcela" required="true"
                                                converter="dataConverter"
                                                requiredMessage="Não é possivel avançar sem colocar a data inicial da parcela"
                                                style="max-width:100px"
                                                value="#{vendaBean.parcela.dataParcela}" locale="pt_BR">
                                            </p:calendar>

Quando clico no botão para adicionar parcela, que futuramente irei fazer gerar automatico vem o erro.

mai 23, 2017 11:30:57 AM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.time.format.DateTimeParseException: Text '23/05/17' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalDate.parse(Unknown Source)
    at java.time.LocalDate.parse(Unknown Source)
    at br.com.bercalini.converter.DataConverter.getAsObject(DataConverter.java:19)
    at org.primefaces.component.calendar.CalendarRenderer.getConvertedValue(CalendarRenderer.java:240)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
    at javax.faces.component.UIInput.validate(UIInput.java:975)
    at org.primefaces.component.calendar.Calendar.validate(Calendar.java:483)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.wizard.Wizard.processValidators(Wizard.java:185)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:403)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Tem que fazer o outro converter de cima também? O outro não sei nem aonde que é :(, e sempre quando eu ultilizo o getInstance ou o getNow me traz o ano de 2020, mais na minha maquina ta no ano de 2017. Alias ele me traz o ano e a data tudo certo, mais quando clico no calendar e abre o ano do meu calendar vem de 2020.

solução!

Seu conversor você pediu 4 digitos para ano e você está passando só 2

Acredito que é isso

Não seria isso não, arrumei aqui e ainda persiste o erro, kkkk por ser tão facil igual você falo o LocalDate não queria desistir dele, mais acho que vou, no Date teria como fazer oque eu queria para gerar as parcelas brow?

O Date é fortemente recomendado você não usar, está obsoleto.

Mas tem sim, você vai ter que gerenciar o milissegundos :(

Qual foi o erro que está rolando ai ? Vamos resolve-lo

Entendi, então o erro é o mesmo que te falei de cima, tentei passar 4 digitos pro ano e o erro foi o mesmo. E o calendar é bom? é só eu não usar o getInstance kkkkk para nao me retornar no ano de 2020

Matheus o erro é esse aqui, o mesmo.

GRAVE: java.time.format.DateTimeParseException: Text '23/05/2017' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(Unknown Source)
    at java.time.format.DateTimeFormatter.parse(Unknown Source)
    at java.time.LocalDate.parse(Unknown Source)
    at java.time.LocalDate.parse(Unknown Source)
    at br.com.bercalini.converter.DataConverter.getAsObject(DataConverter.java:19)

a linha 19 é essa, que está acusando.

return LocalDate.parse(value);
@SuppressWarnings("serial")
@FacesConverter("dataConverter")
public class DataConverter implements Serializable, Converter{

    @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        return LocalDate.parse(value);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        LocalDate dataValor = (LocalDate) value;
        return dataValor.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
    }

}

Usa o método of() :

https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html#of-int-int-int-

Que recebe inicialmente o ano, mes e por último o dia.

Como você sabe o que está chegando na ordem, você consegue construir esse objeto.

Matheus andei pesquisando aqui, e achei uma possivel solução, só que dai me retorna outro erro.

DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy");
        return LocalDate.parse(value, formato);

Passei o formato que eu quero, e o erro é que está trazendo o ano primeiro e depois o mes e depois o dia.

GRAVE: javax.faces.convert.ConverterException: formularioVendaProduto:tabelaParcela:0:j_idt93: não foi possível converter '2017-05-23' em uma sequência.

Internamente ele trabalha com o padrão internacional de datas

Ah sim, o seu metodo que você me passo o of, aonde que implemento ele?

Para criar o objeto no getAsObject

Você vai precisar manipular a string, mas acredito que não vai ter tanto problema em fazer isso

Matheus vou ter bastante trabalho em manipular, poderia me ajudar mais doque já está? :(

Claro!!!

Vamos lá :

   @Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String data) {

         String anoTexto = data.substring(0,2);
         String mesTexto = data.substring(3,5);
         String diaTexto = data.substring(6);

    int ano = Integer.parseInt(anoTexto);
    int mes = Integer.parseInt(mesTexto);
    int dia = Integer.parseInt(diaTexto);


        return LocalDate.of(ano, mes, dia);
    }

E você fala que não teria problemas em fazer isso? Nunca ia pensar dessa forma não kkkk,

 String anoTexto = data.substring(0,4); // Esses valor é pra que?
         String mesTexto = data.substring(5,7); //
         String diaTexto = data.substring(8); //

Fiz uma pequena confusão :

        String anoTexto = data.substring(0,2);
         String mesTexto = data.substring(3,5);
         String diaTexto = data.substring(6);

Ele vai buscar dentro da string dentro do caracter x até o y. Quando a gente apenas um valor ele assume que deve iniciar dali para frente

Matheus :( desculpa denovo, mais uma vez erro, não gosto de ficar enchendo o saco aqui de vocês :( mais não consigo sair do erro kk :(.

GRAVE: javax.faces.convert.ConverterException: formularioVendaProduto:tabelaParcela:0:j_idt93: não foi possível converter '2017-05-23' em uma sequência.

Deu o mesmo erro daquela hora que tentei converter.

Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        String anoTexto = value.substring(0,2);
        String mesTexto = value.substring(3,5);
        String diaTexto = value.substring(6);

        int ano = Integer.parseInt(anoTexto);
        int mes = Integer.parseInt(mesTexto);
        int dia = Integer.parseInt(diaTexto);
        return LocalDate.of(dia, mes, ano);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        LocalDate dataValor = (LocalDate) value;
        return dataValor.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"));
    }

}

Faz um teste para mim ?

 @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        LocalDate dataValor = (LocalDate) value;
        return dataValor.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

Eu também ja tinha tentando assim.

@Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        String anoTexto = value.substring(0,2);
        String mesTexto = value.substring(3,5);
        String diaTexto = value.substring(6);

        int ano = Integer.parseInt(anoTexto);
        int mes = Integer.parseInt(mesTexto);
        int dia = Integer.parseInt(diaTexto);
        return LocalDate.of(ano, mes, dia);
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        LocalDate dataValor = (LocalDate) value;
        return dataValor.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

O erro

mai 23, 2017 3:10:16 PM com.sun.faces.context.AjaxExceptionHandlerImpl handlePartialResponseError
GRAVE: java.lang.NumberFormatException: For input string: "7-"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at br.com.bercalini.converter.DataConverter.getAsObject(DataConverter.java:24)
    at org.primefaces.component.calendar.CalendarRenderer.getConvertedValue(CalendarRenderer.java:240)
    at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
    at javax.faces.component.UIInput.validate(UIInput.java:975)
    at org.primefaces.component.calendar.Calendar.validate(Calendar.java:483)
    at javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
    at javax.faces.component.UIInput.processValidators(UIInput.java:712)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.wizard.Wizard.processValidators(Wizard.java:185)
    at javax.faces.component.UIForm.processValidators(UIForm.java:253)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at org.primefaces.component.dialog.Dialog.processValidators(Dialog.java:403)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
    at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
    at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

fala Alisson, blz??

no lugar de fazer com o substring, tenta fazer assim:

@Override
    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {

        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

        return LocalDate.parse(value, formatter);
    }

Outra coisa que eu vi, é que vc está usando vários tipos diferentes para data, Calendar, Date e agora Local Date.

O LocalDate não é suportado nessa versão 7 do JavaEE porque a versão 2.1 da JPA foi lançada antes do Java 8 e o Date não é mais usado, isso significa que a conversão do @Temporal na entidade não vai funcionar com o LocalDate. Sendo assim, aconselho a usar apenas o Calendar que já tem suporte nativo de conversão e é mais completo que o Date.

Outra coisa que pode estar impactando nesse erro é o seu .xhtml. Tem que ver como você está chamando a conversão do campo.

Espero ter ajudado ;)

Obrigado a todos por respoderem, vlw Samir vou usar o calendar, Matheus muitissimo obrigado por perder seu tempo tentando me ajudar aqui, um forte abraço vlw? No meu calendar tem como fazer geração de parcelas automaticas? :(

Então Alisson, vc falou que vai ter um campo com a qtd de parcelas certo?

Você precisa pegar o total da sua venda e dividir pelo número de parcelas. Depois disso, vc vai popular a sua lista de Parcelas com um objeto Parcela para cada parcela (é a qtd de parcelas) e vai colocar no valor o total divido pelo número de parcelas.

Para a data, vc precisa de uma data inicial (pode ser passada no método que nós estamos construindo), que será a data da primeira parcela. A data da segunda parcela será um mês depois da data da primeira parcela e assim por diante.

eu colocaria essa lógica na hora que vc está populando o seu List parcelas;

blz?

Fala Samir obrigado denovo, pois então cara o valor de cada parcela já está tudo certo, o juros também, só não tenho ideia de como fazer automatico, alias até tenho mais não sei como implementar. Faço com quantidade de parcela que foi escolhida.

for (int i = 0; i <= this.parcela.getParcela(); i++ {
    // Aqui dentro não sei como incrementar mais 30 dias
    // e também o outro mes,
    parcelas.add(parcela);
}

Não sei como fazer por exemplo, fiz em 2x e depois minha parcela gerar 2 parcela com a data por exemplo de hojê 23/05/2017 e a outra parcela para 23/06/2017 deu para entender?

O for aqui tem que ser pela qtd de parcelas:

for (int i = 0; i <= qtdParcelas; i++ {
    Parcela parcela = new Parcela(); 
   // aqui vc seta o valor da parcela com o juros e o valor da data mais um mês;

    parcelas.add(parcela);
}

Para somar um mês ao Calendar:

Calendar dataParcela = Calendar.getInstance(); //a data da primeira parcela
 dataParcela.add( Calendar.MONTH , 1 ); // soma um mes ao calendar

acho que daqui da pra adaptar na sua lógica ;)

Galera consegui fazer a Classe funcionar aqui, apenas fiz alguma alteração, e rodou, vou fechar esse tópico e abrir outro para alguem tiver a mesma duvida que eu não perder tempo aqui e ir para o outro, obrigado a todos, vai ser dificil qual resposta marcar com solução os 2 me ajudaram muito!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software