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

Erro ao usar o LOCALDATE

Opa, beleza? Estou com o seguinte erro, não to conseguindo usar corretamente o localDate, porém quando eu coloco ele em um inputText, funciona corretamente, porem quando uso ele no componente p:calendar me da erro.

<p:outputLabel value="Data Nascimento: " for="dataNascimento" />
<p:calendar id="dataNascimento" pattern="dd/MM/yyyy"
         value="#{clienteBean.cliente.dataNascimento}" 
     requiredMessage="O campo dataNascimento é obrigatório"
     converter="dataConverter">

     <p:ajax listener="#{clienteBean.verificarData}"
          update=":mensagem formularioInserir:dataNascimento"
          event="blur" />
</p:calendar>
@FacesConverter(value = "dataConverter")
@SuppressWarnings("serial")
public class DataConverter implements Converter, Serializable {

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

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

}

Quando coloco a data no campo, calendar, e como o campo está com o required true, ele me retorna a mensagem logo que eu escolho a data, parace que quando eu coloco a data nada acontece, parace que fica nula, até porque escolho a data mais ela não é preenchida ai ocorre a mensagem.

6 respostas

Fala Alisson, tudo bem?

tenta tirar o pattern do calendar:

<p:calendar id="dataNascimento" 
     value="#{clienteBean.cliente.dataNascimento}" 
     requiredMessage="O campo dataNascimento é obrigatório"
     converter="dataConverter">
</p:calendar>

e outra coisa, se vc coloca no input Text, consegue salvar no banco?

Falaa Samir, sim sim se eu colocar no inputText consigo gravar no banco de dados sim, então se eu tirar o pattern do calendar, e quando for escolher a data, o ano retornada é um apenas 2 digitos, ficando por exemplo: 14/08/17 agora que eu tirei o event blur, ocorreu tudo certo com a minha data. Porém se eu tira um pattern fica do jeito que te falei. Porque sera? E tem um detalhe pior ainda, quando eu faço no meu java meu atributo dataNascimento, e quando instancio ele.

private LocalData dataNascimento = LocalDate.now();

Quando faço isso e uso o calendar, ele abre aquele dialog para escolher a data mais já mostra com o ano de 2020, isso de data é muito chato!

solução!

Não sei se entendi direito. Quando vc tira o pattern, o ano fica com dois dígitos mas funciona o p:calendar e quando vc tira o blur funciona com a data certa? (com quatro digitos no ano)

Quanto à essa questão do ano, tenta colocar isso aqui no seu web.xml:

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>

Samir em questão da data ainda não resolveu o problema com as datas :(, tá quando eu tiro o pattern do meu calendar, a data fica assim: 15/08/17 e quando eu coloco ai ela sai formatada certinha 15/08/2017, e tirando o event blur, não dá o erro da data, Oque eu fiz para resolver, tirei do calendar, e coloquei em um inputMask, ai o cara digita a data. Mais oque eu queria também era dentro da minha tabela fazer o calendar para achar a data, e eu consegui resolver.

Pra quem tiver a mesma duvida, como o LocalDate precisa de um converter para ser usado, faz o converter e depois liga na tabela assim.

p:column headerText="Data nascimento"
                                filterBy="#{cliente.dataNascimento}">
                                <f:facet name="filter">
                                    <p:calendar converter="dataConverter" pattern="dd/MM/yyyy">
                                        <p:ajax event="dateSelect" oncomplete="PF('Table').filter()"
                                            update="tabelaClientes" />
                                        <p:ajax event="change" execute="@this"
                                            oncomplete="PF('Table').filter()" update="tabelaClientes" />
                                    </p:calendar>
                                </f:facet>
                                <p:outputLabel value="#{cliente.dataNascimento}">
                                    <f:converter converterId="dataConverter"/>
                                </p:outputLabel>
                            </p:column>

E Samir mais uma vez obrigado por tar sempre me ajudando cara!

Opaa Samir, que estranho agora que eu subi o projeto novamente coloquei o calendar com a sua configuração na web xml e ta com o ano certo, mais já tinha feito isso. E fico com a ano de 2023 agora ta o ano certo. Muitissimo obrigado era isso mesmo!! Me salvo porque sempre sofri com datas afff

Boa!! Ainda bem que deu tudo certo! Precisando estamos ai!

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