Resolvido - Paginação com thymeleaf

Pesquisei e encontrei utilizando o JPA do Spring. O que não estou utilizando.

Como fazer Paginação com thymeleaf?

Resolvi com estes métodos. Esta classe é uma. As controlles buscam elas assim:

package br.com.netsoft.desif.controller;

import java.io.Serializable;
import java.util.List;
import java.util.regex.Pattern;

import org.springframework.stereotype.Controller;

@Controller
public class DesifController implements Serializable {

	private static final long serialVersionUID = 5405661285638640647L;

	protected Long totalRegistrosBD;
	protected List<?> lista;
	protected Integer maximoResultado = 0, totalRegistros = 10, paginaAtual = 1;

	public void proximoController() {
		Integer paginaComparacao = paginaAtual * totalRegistros;
		if (paginaComparacao < totalRegistrosBD) {
			maximoResultado = maximoResultado + totalRegistros;
			paginaAtual = paginaAtual + 1;
		}
	}

	public void anteriorController() {
		if (paginaAtual > 1) {
			maximoResultado = maximoResultado - totalRegistros;
			paginaAtual = paginaAtual - 1;
		}
	}

	public void primeiraController() {
		paginaAtual = 1;
		maximoResultado = 0;
	}

	public void ultimaController() {
		Integer totalPagina = Integer.valueOf(totalRegistrosBD.toString());
		paginaAtual = totalPaginas(totalRegistrosBD);
		totalPagina = totalPagina - totalRegistros;
		maximoResultado = totalPagina;
	}

	protected Integer totalPaginas(Long totalRegistrosBD) {
		Double paginacao = (double) ((double) totalRegistrosBD / totalRegistros);
		String paginas[] = paginacao.toString().split(Pattern.quote("."));
		if (Integer.parseInt(paginas[1]) == 0) {
			return Integer.parseInt(paginas[0]);
		} else {
			Integer retorno = Integer.parseInt(paginas[0]);
			retorno = retorno + 1;
			return retorno;
		}
	}
}

Controle de cada entidade

package br.com.netsoft.desif.controller.federal;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import br.com.netsoft.desif.controller.DesifController;
import br.com.netsoft.desif.model.desif.federal.MunicipioEntity;
import br.com.netsoft.desif.model.endereco.EstadoEntity;
import br.com.netsoft.desif.model.endereco.PaisEntity;
import br.com.netsoft.desif.servico.endereco.EstadoServico;
import br.com.netsoft.desif.servico.endereco.PaisServico;
import br.com.netsoft.desif.servico.federal.MunicipioServico;

@Controller
@RequestMapping("/municipio")
public class MunicipioController extends DesifController {

	private static final long serialVersionUID = -2628648112745006020L;

	@Autowired
	private MunicipioServico municipioServico;

	@Autowired
	private EstadoServico estadoServico;

	@Autowired
	private PaisServico paisServico;

	@RequestMapping(value = "/proximo", method = RequestMethod.GET)
	public ModelAndView proximo() {
		super.totalRegistrosBD = contarTodos();
		super.proximoController();
		return redicionamentoListar();
	}

	@RequestMapping(value = "/anterior", method = RequestMethod.GET)
	public ModelAndView anterior() {
		super.anteriorController();
		return redicionamentoListar();
	}

	@RequestMapping(value = "/primeira", method = RequestMethod.GET)
	public ModelAndView primeira() {
		super.primeiraController();
		return redicionamentoListar();
	}

	@RequestMapping(value = "/ultima", method = RequestMethod.GET)
	public ModelAndView ultima() {
		super.totalRegistrosBD = contarTodos();
		super.ultimaController();
		return redicionamentoListar();
	}

	@RequestMapping(value = "/listar", method = RequestMethod.GET)
	public ModelAndView index() {
		logger.info("Listando municípios");
		super.lista = municipioServico.listar(maximoResultado, totalRegistros);
		Integer totalPagina = super.totalPaginas(contarTodos());
		ModelAndView modelAndView = new ModelAndView("municipio/index");
		modelAndView.addObject("municipios", super.lista);
		modelAndView.addObject("totalRegistros", contarTodos());
		modelAndView.addObject("totalPagina", totalPagina);
		modelAndView.addObject("paginaAtual", paginaAtual);
		return modelAndView;
	}

	private Long contarTodos() {
		return municipioServico.contarTodos();
	}
}
1 curtida