Pesquisei e encontrei utilizando o JPA do Spring. O que não estou utilizando.
Como fazer 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();
}
}