NOTA: Eu já vi uma variedade de paginação on -line, muitas das quais afirmam ser comuns, mas muitas vezes não são satisfatórias: alguns adicionam informações sobre endereços de URL à classe de paginação e outros também executam ações de paginação na classe de paginação (essa ação é inteiramente uma questão de operar o banco de dados). Agora, depois do meu resumo e refinamento:
Se você está pagando manualmente ou usando a ajuda de uma estrutura. Esta classe de ferramentas pode ajudá -lo a obter efeitos estáveis de paginação (incluindo a função de numeração da página de navegação), e o método de uso é relativamente simples: ok, menos bobagem, o código é o seguinte:
pacote test.dao; importar java.util.list; /** // Resultado do registro do objeto Conjunto privado int total = 0; // Total Registros Private Int Limit = 20; // número de registros exibidos por página private int páginas = 1; // Total de páginas privado Int pagenumber = 1; // página atual Private boolean isfirstpage = false; // Se é a primeira página Private Boolean Islastpage = false; // Se é a última página Private boolean haspreviousPage = false; // existe uma página anterior Private Boolean hasNextPage = false; // Existe uma próxima página Private Int NavigationPages = 8; // Número de números de página de navegação private Int [] navegaçãoPagenumbers; // Todos os números de página de navegação Public Pager (int Total, Int Pagenumber, Limit); } public pager (int Total, int pagenumber, int limite) {init (total, pagenumber, limite); } private void init (int Total, int pagenumber, int limite) {init (total, pagenumber, limite); } private void init (int Total, int pagenumber, int limite) {// Defina os parâmetros básicos this.Total = Total; this.limit = limite; this.Pages = (this.total-1)/this.limit+1; // Originalmente correto de acordo com o número atual que pode estar incorreto se (pagenumber <1) {this.pageNumber = 1; } else if (pagenumber> this.pages) {this.pageNumber = this.Pages; } else {this.pageNumber = pagenumber; } // Após a configuração dos parâmetros básicos, calcule a página de navegação calcnavigatePagenumbers (); //, bem como a determinação do limite da página juizPageBouDary (); } /*** Calcule a página de navegação* /private void calcnAvigatePagenumbers () {// Quando o número total de páginas é menor ou igual ao número de páginas de navegação se (páginas <= navegatePages) {NavigatePagenumbers = new int [páginas]; for (int i = 0; i <páginas; i ++) {navegaPagenumbers [i] = i+1; }} else {// Quando o número total de páginas é maior que o número de páginas de navegação navegandopagenumbers = new int [navegatePages]; int startnum = pagenumber-navigatePages/2; int endnum = pagenumber+NavigatePages/2; if (startnum <1) {startNum = 1; // (a primeira página NavigatePages para (int i = 0; i <NavigatePages; i ++) {NavigatePagenumbers [i] = startNum ++;}} else if (endnum> páginas) {endnum = páginas; // a última página de navegação para (Int i) [ENVAGEPAGES-1; } else {// Todas as páginas intermediárias para (int i = 0; i <navegação Pagenumber! = 1; */ public int gettotal () {return total; getpagenumber () {retorna pagenumber; HasPreviouspage () {return hasPreviousPage; .Append (", pagenumber ="). Append (pagenumber) .Append (", limite ="). Anexe (limite) .Append (", isfirstpage ="). Append (isFirstPage) .ppend (", hasplastpage ="). .Append ("Hasnextpage ="). "+NavigatePagenumbers [i]);} sb.append (", list.size = "+list.size ()); sb.append ("] "); return sb.toString ();}} Sobre o uso: as etapas são as seguintes:
1). Independentemente de a consulta condicional ser usada, primeiro conte o número total correspondente de entradas.
2). Construa uma classe de pager (os parâmetros de limite podem ser feitos de acordo com seu próprio primeiro plano)
3). Obtenha o parâmetro pagenumber que foi corrigido automaticamente de acordo com a classe de pager construída, multiplique -1 e limite para servir como localização do primeiro registro a ser consultado.
4). Defina todos os registros a serem verificados na posição inicial até o limite. (Se você estiver pagando manualmente, também é possível que o segundo parâmetro seja o deslocamento da posição do registro final, dependendo do banco de dados)
5). Defina a lista consultada por [condição] no objeto Pager e retorne.
6). Na camada de apresentação, você pode usar este objeto de página através do servlet ou ação ou obter diretamente o objeto Pager. A questão específica de emendar o URL também deve ser deixada para a camada de apresentação para concluir.
int totalCount = Integer.ValueOf (QueryCount.UnikeResult (). ToString ()); Pager pager = new pager (totalCount, pagenumber, limite); queryList.setfirstresult ((PAGER.GETPAGENBUMBRO ()-1)*limite); // falha de processamento de falha querylist.setMaxResults (limite); pager.setList (queryList.List ()); Pager de retorno;
O código acima é um exemplo simples usando o Hibernate. Se você estiver usando páginas manuais, siga as etapas a serem usadas.
Obviamente, a paginação pode ser concluída na camada DAO ou na camada de serviço. O servlet ou ação chama o código da camada de serviço. Pessoalmente, acho: a paginação é realmente uma necessidade comercial, para que possa ser colocada no nível dos negócios. Como a camada DAO fornece a lista de estatísticas [Condição de Consulta de Condição] e a contagem de estatísticas [condição], a camada de negócios pode fazer chamadas de método de acordo com suas próprias necessidades (ela só precisa ser seguida por etapas estabelecidas. É claro que muitas vezes, a empresa estabeleceu etapas de processo).
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.