Cícero Ednilson

Blog sobre Desenvolvimento de Softwares

Home » Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×

Nessa parte do nosso tutorial vamos aprender como formatar um objeto do tipo LocalDateTime em uma página JSF.

Páginas do tutorial.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 1: Introdução.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 2: Criando o banco de dados.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 3: Criando o projeto com JSF no Maven.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 4: Criando o template com Facelets.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 5: Desenvolvendo a autenticação do sistema.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 6: Desenvolvendo cadastro de pessoa.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 7: Desenvolvendo cadastro via upload de arquivo XML.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 8: Desenvolvendo consulta com PrimeFaces dataTable.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 10: Editando um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 11: Excluindo um registro.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 12: Consulta com Carousel PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 13: Consulta com Gráfico PrimeFaces.

Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 14: Exportando arquivo XML com fileDownload e Jdom.

Criando o conversor.

No pacote br.com.ciceroednilson.uteis vamos criar uma classe com o nome de LocalDateTimeConverter, depois vamos deixar nossa classe com o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package br.com.ciceroednilson.uteis;
 
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.Date;
 
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.FacesConverter;
 
@FacesConverter(value= LocalDateTimeConverter.ID)
public class LocalDateTimeConverter extends DateTimeConverter {
 
	public static final String ID="br.com.ciceroednilson.uteis.LocalDateTimeConverter"; 
 
	@Override
	public Object getAsObject(FacesContext facesContext, UIComponent uiComponent, String value) {
 
		Date date = null;
		LocalDateTime localDateTime = null;
 
		Object object = super.getAsObject(facesContext, uiComponent, value);
 
		if(object instanceof Date){
 
			date = (Date) object;
 
			Instant instant = Instant.ofEpochMilli(date.getTime());
			localDateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
	  		return localDateTime;
 
		}
		else{
 
			throw new IllegalArgumentException(String.format("value=%s Não foi possível converter LocalDateTime, resultado super.getAsObject=%s",value,object));			
		}			 
 
 
	}
 
	  @Override
	  public String getAsString(FacesContext facesContext, UIComponent uiComponent, Object value) {
 
		  if(value == null)
			  return super.getAsString(facesContext, uiComponent, value);
 
		  if(value instanceof LocalDateTime){
 
			  LocalDateTime localDateTime = (LocalDateTime) value;
 
			  Instant instant = localDateTime.toInstant(ZoneOffset.UTC);
 
			  Date  date =  Date.from(instant);
 
			  return super.getAsString(facesContext, uiComponent, date);
		  }
		  else{
 
			  throw new IllegalArgumentException(String.format("value=%s não é um LocalDateTime",value));  
		  }
 
	  }
}

Agora na nossa pasta WEB-INF vamos criar um arquivo xml com o nome de LocalDateTimeConverter-taglib.xml, depois vamos deixar nosso arquivo com o código abaixo.

1
2
3
4
5
6
7
8
9
10
11
12
13
<facelet-taglib version="2.2"
      xmlns="http://xmlns.jcp.org/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facelettaglibrary_2_2.xsd">
 
  <namespace>http://ciceroednilson.com.br/LocalDateTimeConverter</namespace>
   <tag>
    <tag-name>LocalDateTimeConverter</tag-name>
    <converter>
     <converter-id>br.com.ciceroednilson.uteis.LocalDateTimeConverter</converter-id>
    </converter>
   </tag>
</facelet-taglib>

Abaixo podemos ver o arquivo que criamos no nosso projeto.

Agora vamos abrir o nosso arquivo web.xml e vamos adicionar o código abaixo para registrar a tag lib que criamos.

1
2
3
4
5
  <!-- Registrando a tag lib que criamos -->
  <context-param>
     <param-name>facelets.LIBRARIES</param-name>
     <param-value>/WEB-INF/LocalDateTimeConverter-taglib.xml</param-value>
  </context-param>

Abaixo podemos ver a imagem completa de como deve ficar o nosso arquivo web.xml.

Agora vamos abrir nossa página consultarPessoa.xhtml e vamos adicionar a nossa tag lib como mostra a imagem abaixo.

Agora no campo onde vamos usar o nosso componente para formatar a data basta inserir o tag como mostra o exemplo da nossa página de consulta.

E então quando acessarmos nossa página de consulta vamos ver o nosso campo de data com a formatação que informamos.

Bom é isso ai, nessa parte do nosso tutorial aprendemos como formatar um LocalDateTime em uma página JSF, na próxima parte do nosso tutorial vamos criar a rotina de edição de registro, até a próxima.

Comentários

Name of author

Name: ciceroednilson@gmail.com

7 thoughts on “Criando uma aplicação Java com JSF, PrimeFaces, CDI e JPA – Parte 9: Formatando LocalDateTime.

  • Boa noite…

    estou com uma dúvida, fiz todo esse passo da conversão da data, fiz 1 escrevendo e depois copiando o fonte e colando, mas ainda continua listando data sem a formatação… a unica coisa diferente no seu codigo para o meu foi o nome do pacote que no meu caso coloquei “br.com.ftbl” e no seu caso seria “br.com.ciceroednilson”, e pra melhorar não da erro nenhum nem em execução e nem em compilação…
    na pagina consultarPessoa.xhtml tem um “warnings” assim: Can’t find facelet tag library for uri http://ftbl.com.br/LocalDateTimeConverter
    teria alguma ideia?

    Reply
    • ciceroednilson@gmail.com Post author

      Em primeiro lugar muito obrigado por visitar o blog.

      Você criou o arquivo LocalDateTimeConverter-taglib.xml e depois registrou ele no web.xml? No seu caso ele não está encontrando esse namespace que foi definido no LocalDateTimeConverter-taglib.xml.

      Veja também se você trocou o valor da variável public static final String ID=”br.com.ciceroednilson.uteis.LocalDateTimeConverter”;

      Se você conseguir resolver posta ai para ajudar outros amigos.

      Abraços

      Reply
      • Criei sim o arquivo “LocalDateTimeConverter-taglib.xml” e coloquei a referencia dele no web.xml;

        Agora onde está essa var public static final String ID=”br.com.ciceroednilson.uteis.LocalDateTimeConverter”; ?

        Em qual arquivo?

        >>>Parabéns pelo Blog e esse tutorial tá show de bola!!!

        Reply
        • ciceroednilson@gmail.com Post author

          Está na classe LocalDateTimeConverter do pacote br.com.ciceroednilson.uteis.

          Reply
          • Camarada, eu refiz copiando e colocando e mesmo assim ainda fica o “warnings” assim: Can’t find facelet tag library for uri”

            posso enviar para o seu email os arquivos, pq copiar aqui fica complicado

            Tenho uma duvida também na “parte-10” vou colocar-la o problema.

          • ciceroednilson@gmail.com Post author

            Pode me enviar por e-mail que dou uma olhada.

            Abraços!

        • Apenas troque ID=”br.com.ciceroednilson.uteis.LocalDateTimeConverter” por ID=”nome.do.pacote.que.o.arquivo.a.seguir.se.encontra.LocalDateTimeConverter”. Ok?

          Reply

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

0 Flares Twitter 0 Facebook 0 Filament.io 0 Flares ×