Olá Paulo, tudo bem?
Para implementar a paginação em uma aplicação com Thymeleaf, você pode seguir algo como os seguintes passos:
No seu controlador Spring MVC, você precisará receber informações sobre a página atual e o número de elementos por página. Você pode fazer isso através dos parâmetros da URL ou usar um objeto Pageable fornecido pelo Spring Data, por exemplo. A página atual é importante para calcular o deslocamento correto dos elementos no banco de dados.
No serviço responsável por buscar os registros, você precisa utilizar essas informações para executar a consulta paginada no banco de dados. Dependendo do banco de dados e do framework que você está usando (por exemplo, Spring Data JPA), há recursos específicos para realizar a paginação diretamente na consulta.
No seu modelo Thymeleaf, você pode utilizar a diretiva th:each para iterar sobre os registros retornados pela consulta e exibi-los na página. Além disso, você precisará incluir os controles de paginação, como os links para a página anterior e próxima, e a exibição do número da página atual.
Aqui está um exemplo simplificado de como você pode fazer isso no Thymeleaf:
<table>
<!-- Itera sobre os registros -->
<tr th:each="registro : ${registros}">
<td th:text="${registro.nome}">Nome</td>
<td th:text="${registro.email}">Email</td>
</tr>
</table>
<!-- Controles de paginação -->
<div th:if="${page.totalPages > 1}">
<ul class="pagination">
<li th:class="${page.number == 0} ? disabled">
<a th:href="@{/registros(pagina=0)}">«</a>
</li>
<li th:each="pageNumber : ${#numbers.sequence(0, page.totalPages - 1)}">
<a th:href="@{/registros(pagina=${pageNumber})}" th:text="${pageNumber + 1}"></a>
</li>
<li th:class="${page.number == page.totalPages - 1} ? disabled">
<a th:href="@{/registros(pagina=${page.totalPages - 1})}">»</a>
</li>
</ul>
</div>
No exemplo acima, a tabela exibe os registros retornados pela consulta. Em seguida, a parte de paginação é gerada. A condição th:if="${page.totalPages > 1}" garante que os controles de paginação sejam mostrados apenas se houver mais de uma página.
Os links para cada página são gerados com base no número total de páginas (page.totalPages) e usam uma variável pageNumber para iterar sobre os números de página. Você pode estilizar os links e adicionar estilos CSS conforme necessário.
No seu controlador Spring MVC, você precisará mapear a rota /registros para lidar com a páginação corretamente. Por exemplo:
@GetMapping("/registros")
public String listarRegistros(@RequestParam(defaultValue = "0") int pagina, Model model) {
// Lógica para buscar os registros paginados
Page<Registro> registros = registroService.buscarRegistrosPaginados(pagina);
model.addAttribute("registros", registros.getContent());
model.addAttribute("page", registros);
return "lista-registros";
}
No exemplo acima, o parâmetro pagina é definido como 0 por padrão, caso não seja fornecido na URL. Esse valor será passado para o serviço responsável por buscar os registros paginados. Em seguida, o resultado da consulta é adicionado ao modelo, juntamente com o objeto Page para acessar as informações de paginação.
Lembre-se de adaptar o exemplo ao seu código e necessidades específicas. A implementação exata pode variar dependendo da estrutura do seu projeto, das bibliotecas utilizadas e das tecnologias envolvidas.