Olá desenvolvedores, neste tutorial implementaremos o TimeZone para podermos trabalhar com datas e resolver o problema de a data ser exibida com um dia a menos do que foi informado. Como mencionado em “DATAS: CONVERSÃO DE DATAS COM JSF”, É comum em qualquer tipo de aplicação, formulários com campo de datas e situações em que operações são realizadas sobre elas.
ATRIBUTO DATA
E da mesma forma como no tutorial anterior, o atributo dataNascimento a ser implementado na Entidade Pessoa, deverá, por default, receber o new Date. Dessa forma o campo exibirá como valor padrão a data vigente. Lembrando ainda que o atributo deverá ser precedido da anotação @Temporal do pacote javax.persistence. E igualmente os métodos Getters and Setters deverão ser gerados para ele.
@Temporal(TemporalType.Date)
private Date dataNascimento = new Date();
IMPLEMENTANDO O TIMEZONE
É do lado do JSF – JavaServer Faces que a mudança ocorrerá. O componente h:inputText implementado na primeirapagina.xhtml do contexto da data, deverá ser precedido pelo h:outputLabel. Como não canso de repetir, o label é importante para os requisitos de usabilidade e acessibilidade.
E dentro do par de tags do componente de input, por meio do facelets, f:convertDateTime, que a data será de fato implementada. Assim, estabeleceremos um padrão para o campo “data”, informando no atributo pattern o formato qual desejamos que ela seja exibida.
<f:convertDataTime pattern=“dd/MM/yyyy” />
No entanto, haverá um adendo, precisaremos inserir outros dois atributos, o locale, cujo valor faz referência a região. E o segundo adendo, que é a propriedade timeZone. Esta proopriedade “pega” a data real, visto que como valor ele recebe uma referência ao fuso horário de Brasília, “GMT – 03:00”. GMT é um acrônimo para Greenwich Mean Time ou Hora Média em Greenwich. Se em sua aplicação você tiver problemas com a implementação de horas e/ou datas, o timeZone é a propriedade que poderá resolver este problema.
Na tela a exibição seguirá o padrão informado por meio do pattern de dia, mês e ano, no entanto, no banco de dados, o formato apresentado é o convencional.
MENSAGEM DE ERRO
Determinamos por meio do pattern um formato padrão de data que o usuário deverá respeitar ao informar a data. No entanto, aproveitando que estamos usando um validador f:convertDateTime poderemos a partir dessa validação exibir uma mensagem de erro, via atributo converterMessage=“Data errada”, caso o usuário insira a data em um formato errado.
EM POUCAS PALAVRAS
Neste tutorial vimos de forma simples e sem complexidade como implementar um atributo de data e ainda de forma mais simples implementamos a validação desse atributo sem que fosse necessário recorrer ao back-end para fazer a validação. É preciso estudar o framework, e conhecê-lo para que você possa pelo menos ter ideia da extensão do seu poder.