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ário | Nome | Departamento | Cargo |
---|---|---|---|---|
105 | R$ 1.800,00 | Joana Prado Rios | Tecnologia da Informação | Programador Java Jr |
106 | R$ 2.000,00 | Bruna Silva | Contabilidade | Contador |
107 | R$ 3.000,00 | Rui Viscentine Santos | Contabilidade | Auditor |
Totalizador | R$ 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