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.

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

6 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!

Deixe uma resposta

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