Totalizador de colunas com Thymeleaf

Dias atrás em um dos meus cursos que aborda o uso do Spring MVC com Thymeleaf Template me foi perguntado como criar um totalizar de colunas para uma tabela. Se você procurar no Google vai encontrar esse recurso baseado em exemplos com Javascript/jQuery. Mas não é preciso desse trabalho todo já que o Thymeleaf oferece uma função capaz de realizar a soma para gerar o totalizador.

Veja a tabela abaixo. A ideia do totalizador seria somar a coluna salário usando o Thymeleaf para isso.

#SalárioNomeDepartamentoCargo
105R$ 1.800,00Joana Prado RiosTecnologia da InformaçãoProgramador Java Jr
106R$ 2.000,00Bruna SilvaContabilidadeContador
107R$ 3.000,00Rui Viscentine SantosContabilidadeAuditor
TotalizadorR$ 6.800,00

A tabela acima teria o seguinte código HTML mesclado aos componentes do Thymeleaf:

<table class="table table-striped table-hover table-sm">
<thead>
<tr>
  <th>#</th>
  <th>Salário</th>
  <th>Nome</th>
  <th>Departamento</th>
  <th>Cargo</th>
</tr>
</thead>
<tbody>
  <tr th:each="f : ${funcionarios}">
     <td th:text="${f.id}">2</td>
     <td th:text="{#numbers.formatCurrency(f.salario)}">R$ 3.560,70</td> 
     <td th:text="${f.nome}">Ana Maria Lindoval</td>
     <td th:text="${f.cargo.departamento.nome}">Administração</td>
     <td th:text="${f.cargo.nome}">Auxiliar Administrativo</td>
  </tr>
</tbody>
<tfoot>
  <tr>
     <td colspan="2">Totalizador</td>
     <td th:text="${#numbers.formatCurrency(#aggregates.sum(funcionarios.![salario]))}">R$ 180,00</td>
  </tr>
</tfoot>
</table>

O código fonte da tabela possui o componente th:each, do Themeleaf, para percorrer a variável funcionarios enviada pelo controller até página. Esta variável possui a lista de funcionários que será listada na tabela.

Confira o rodapé da tabela, o local onde teremos o totalizador. Neste trecho de código usamos o th:text para exibir o resultado e como valor de th:text temos duas funções do Thymeleaf que são:

  • numbers.formatCurrency – usada para formatar o valor monetário. Necessária apenas para esse fim, sendo assim, é opcional neste exemplo;
  • aggregates.sum – função responsável por realizar a soma dos valores referentes aos salários e gerar o totalizador.

Na função do totalizador é preciso declarar a variável com a lista de funcionários para que a própria função se encarregue de percorre-la e somar os salários. Para que a função saiba qual atributo deve somar dentro da lista você vai indicar a expressão da seguinte forma funcionarios.![salario], onde salario é o nome do atributo na classe de entidade.

Feito, muito simples não é? Espero que ajude e até a próxima!

Referencia:

Aggregates –
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#aggregates

Ballem

Marcio Ballem é bacharel em Sistemas de Informação pelo Centro Universitário Franciscano em Santa Maria/RS. Tem experiência com desenvolvimento Delphi e Java em projetos para gestão pública e acadêmica. Possui certificação em Java, OCJP 6.