Primavera e Thymeleaf 3: Expressões
1. Introdução
Thymeleaf é um mecanismo de template Java para processar e criar HTML, XML, JavaScript, CSS e texto simples. Para uma introdução de Thymeleaf e Spring, dê uma olhada emthis write-up.
Além dessas funções básicas, o Thymeleaf oferece um conjunto de objetos utilitários que nos ajudarão a executar tarefas comuns em nosso aplicativo.
Neste artigo, discutiremos um recurso central do Thymeleaf 3.0 - Expression Utility Objects em aplicativos Spring MVC. Mais especificamente, cobriremos o tópico de processamento de datas, calendários, strings, objetos e muito mais.
2. Dependências do Maven
Primeiro, vamos ver a configuração necessária para integrar o Thymeleaf ao Spring. A bibliotecathymeleaf-spring é necessária em nossas dependências:
org.thymeleaf
thymeleaf
3.0.9.RELEASE
org.thymeleaf
thymeleaf-spring5
3.0.9.RELEASE
Observe que, para um projeto Spring 4, a bibliotecathymeleaf-spring4 deve ser usada em vez dethymeleaf-spring5. A versão mais recente das dependências pode ser encontradahere.
3. Objetos de utilitário de expressão
Antes de examinar o foco principal deste artigo, se você quiser dar um passo atrás e ver como configurar o Thymeleaf 3.0 em seu projeto de aplicativo da web, dê uma olhada nestetutorial.
Para o propósito do artigo atual, criamos um controlador Spring e um arquivo HTML - para testar todos os recursos que iremos discutir. Abaixo está a lista completa dos objetos auxiliares disponíveis e suas funções:
-
#dates: métodos utilitários para objetosjava.util.Date
-
#calendars: semelhante a#dates, usado para objetosjava.util.Calendar
-
#numbers: métodos utilitários para formatar objetos numéricos
-
#strings: métodos utilitários para objetosString
-
#objects: métodos utilitários para a classe JavaObject em geral
-
#bools: métodos de utilidade para avaliação deboolean
-
#arrays: métodos utilitários para matrizes
-
#lists: métodos utilitários para listas
-
#sets: métodos utilitários para conjuntos
-
#maps: métodos utilitários para mapas
-
#aggregates: métodos utilitários para criar agregados em matrizes ou coleções
-
#messages: métodos utilitários para obter mensagens externalizadas dentro de expressões de variáveis
3.1. Objetos de datas
A primeira função que queremos discutir é o processamento dos objetosjava.util.Date. Os objetos de utilitário de expressão responsáveis pelo processamento dedate começam com#dates.functionName().. A primeira função que queremos cobrir é a formatação de um objetoDate (que é adicionado aos parâmetros do modelo Spring).
Digamos que queremos usar o formatoISO8601:
Não importa como nossodate foi definido no lado do back-end, ele precisa ser exibido de acordo com este padrão. Além disso, se quisermos ser específicos com o formato, podemos especificá-lo manualmente:
A função recebe duas variáveis como parâmetros:Datee seu formato.
Finalmente, aqui estão algumas funções igualmente úteis que podemos usar:
No primeiro receberemos o nome do dia da semana, no segundo criaremos um novo objetoDate, e por último criaremos um novoDate com horário definido para 00:00 .
3.2. Objetos de calendário
Os utilitários de calendário são muito semelhantes ao processamento de datas, exceto que estamos usando uma instância do objetojava.util.Calendar:
A única diferença é quando queremos criar uma nova instânciaCalendar:
Observe que podemos usar qualquer método de classeCalendar para obter os dados solicitados.
3.3. Processamento de Números
Outro recurso muito útil é o processamento de números. Vamos nos concentrar em uma variávelnum, criada aleatoriamente com um tipodouble:
Na primeira linha, formata-se o número decimal, definindo dígitos inteiros mínimos e dígitos decimais exatos. No segundo, além dos dígitos inteiro e decimal, especificamos o separador decimal. As opções sãoPOINT,COMMA,WHITESPACE,NONE ouDEFAULT (por localidade).
Há mais uma função que queremos apresentar neste parágrafo. É a criação de uma sequência de números inteiros:
No primeiro exemplo, o Thymeleaf gerou uma sequência de 0 a 2, enquanto no segundo, além do valor mínimo e máximo, fornecemos uma definição de etapa (neste exemplo, os valores serão alterados em dois).
Observe que o intervalo está fechado nos dois lados.
3.4. Operações de Strings
É o recurso mais abrangente dos objetos do utilitário de expressão.
Podemos iniciar a descrição com a utilidade de verificar objetos vazios ounullString. Freqüentemente, os desenvolvedores usariam métodos Java dentro de tags Thymeleaf para fazer isso, o que pode não ser seguro para objetosnull.
Em vez disso, podemos fazer o seguinte:
O primeiroString não está vazio, então o método retornaráfalse. O segundoString énull, então obteremostrue. Finalmente, podemos usar o método#strings.defaultString(…) para especificar um valor padrão, seString estiver vazio.
Existem muitos outros métodos. Todos eles funcionam não apenas com strings, mas também comJava.Collections.. Por exemplo, para usar operações relacionadas a substring:
ou usar comparação e concatenação com segurança nula:
Por fim, existem recursos relacionados ao estilo de texto, que preservarão a sintaxe sempre a mesma:
No primeiro método, o texto abreviado fará com que tenha um tamanho máximo den. Se um texto for maior, ele será cortado e finalizado com “…”.
No segundo método, capitalizaremos as palavras.
3.5. Agregados
A última, mas não menos importante, função que queremos discutir aqui éaggregates. Eles sãonull seguros e fornecem utilitários para calcular a média ou soma do array ou qualquer outra coleção:
4. Conclusão
Neste artigo, discutimos os recursos dos Expression Utility Objects implementados na estrutura Thymeleaf, versão 3.0.
A implementação completa deste tutorial pode ser encontrada emthe GitHub project.
How to test? Nossa sugestão é brincar primeiro com um navegador e, em seguida, verificar também os testes JUnit existentes.
Observe que os exemplos não cobrem todas as expressões de utilidade disponíveis. Se você quiser aprender sobre todos os tipos de utilitários, dê uma olhada emhere.