Remarque: J'ai vu une variété de paginations en ligne, dont beaucoup prétendent être courantes, mais souvent elles ne sont pas satisfaisantes: certains ajoutent des informations d'adresse URL à la classe de pagination, et certains effectuent également des actions de pagination dans la classe de pagination (cette action est entièrement une question d'exploitation de la base de données). Maintenant, après mon résumé et mon raffinement:
Que vous paginiez manuellement vous-même ou que vous utilisiez l'aide d'un cadre. Cette classe d'outils peut vous aider à réaliser des effets de pagination stables (y compris la fonction de numérotation de la page de navigation), et la méthode d'utilisation est relativement simple: ok, moins de non-sens, le code est le suivant:
package test.dao; Importer java.util.list; / ** * Classe d'outils pour la pagination * @author ne prenez pas le nom de net * / classe publique Pager <T> {Liste privée <T> liste; // Enregistrement d'objet Set private int total = 0; // Total Records private int limit = 20; // Nombre d'enregistrements affichés par page Private int pages = 1; // pages totales private int pageNumber = 1; // Page actuelle privée booléen isFirstpage = false; // Si c'est la première page privée booléenne IslastPage = false; // Si c'est la dernière page Boolean HaspreviousPage privé = false; // Existe-t-il une page précédente booléenne privée hasnextpage = false; // Existe-t-il une page suivante int private NavigationPages = 8; // Nombre de numéros de page de navigation privés int [] NavigationPageNumbers; // Tous les numéros de page de navigation publique Pager (int total, int pageNumber, limite); } public pager (int total, int pageNumber, int limit) {init (total, pageNumber, limite); } private void init (int total, int pageNumber, int limit) {init (total, pageNumber, limite); } private void init (int total, int pageNumber, int limit) {// définir les paramètres de base this.total = total; this.limit = limite; this.pages = (this.total-1) / this.limit+1; // à l'origine corrigé en fonction du nombre actuel qui peut être incorrect si (pageNumber <1) {this.pageNumber = 1; } else if (pageNumber> this.pages) {this.pagenumber = this.pages; } else {this.pagenumber = pageNumber; } // Après le paramètre des paramètres de base, calculez la page de navigation CalcNavigatPageNumbers (); // ainsi que la détermination de la page Boundary jugePageBoudary (); } / ** * Calculez la page de navigation * / private void calcnavigatpagenumbers () {// lorsque le nombre total de pages est inférieur ou égal au nombre de pages de navigation if (pages <= naviguedpages) {navigationpagenumbers = new int [pages]; pour (int i = 0; i <pages; i ++) {naviguepageNumbers [i] = i + 1; }} else {// Lorsque le nombre total de pages est supérieur au nombre de pages de navigation navigueppagenumbers = new int [naviguepages]; int startnum = pageNumber-NaviGatePages / 2; int endnum = pageNumber + navigationpages / 2; if (startnum <1) {startNum = 1; // (la première page NavigatePages pour (int i = 0; i <naviguedpages; i ++) {naviguepagenumbers [i] = startnum ++;}} else if (endnum> pages) {endnum = pages; // la dernière page de navigue } else {// Toutes les pages intermédiaires pour (int i = 0; i <navigationpages; i ++) {navigationpagenumbers [i] = startNum ++;}}}}} / ** * Déterminez la frontière de la page * / Private Vee PageNumber! = 1; HaspreviousPage = PageNumber> 1; * / public int getTotal () {return total;} / ** * Obtenez le nombre d'enregistrements affichés par page * @return {int} * / public int getLIMIT () {return; getPageNumber () {return pageNumber;} / ** * Numéros de page de navigation * @Return {int []} * / public int [] public booléen iSFirstpage () {return isFiRSTpage; HaspreviousPage () {return haspreviousPage;} public boolean hasnextpage () {return hasnextpage;} public string toString () {stringbuffer sb = new StringBuffer (); .APPEND (", pageNumber ="). append (pageNumber) .Apnd (", limit ="). append (limit) .append (", isFirstpage ="). annex (isLastPage) .Apnd (", islastpage ="). .APPLENCE (", HasnextPage ="). "+ navigationpageNumbers [i]);} sb.append (", list.size = "+ list.size ()); sb.append ("] "); return sb.tostring ();}} À propos de l'utilisation: les étapes sont les suivantes:
1). Que la requête conditionnelle soit utilisée, comptez d'abord le nombre total correspondant d'entrées.
2). Construisez une classe de téléavertisseur (les paramètres limites peuvent être fabriqués en fonction de leur propre premier plan)
3). Obtenez le paramètre PageNumber qui a été automatiquement corrigé en fonction de la classe de sacrer construit, multipliez -1 et limite pour servir l'emplacement du premier enregistrement à interroger.
4). Définissez tous les enregistrements à vérifier à partir de la position de départ jusqu'à la limite. (Si vous paginiez manuellement, il est également possible que le deuxième paramètre soit le décalage de position de l'enregistrement de fin, selon la base de données)
5). Définissez la liste interrogée par [Condition] dans l'objet Pager et retournez.
6). Dans la couche de présentation, vous pouvez utiliser cet objet de page via le servlet ou l'action ou obtenir directement l'objet Pager. La question spécifique de l'épissage de l'URL doit également être laissée à la couche de présentation à compléter.
int totalCount = Integer.ValueOf (queryCount.UniqueResult (). ToString ()); Pager Pager = new Pager (TotalCount, PageNumber, Limit); queryList.setFirStResult ((pager.getPageNumber () - 1) * limite); // Traitement tolérant à défaut QueryList.SetMaxResults (limite); pager.setList (queryList.list ()); Retour pager;
Le code ci-dessus est un exemple simple en utilisant Hibernate. Si vous utilisez des pages manuelles, suivez les étapes à utiliser.
Bien sûr, la pagination peut être terminée dans la couche DAO ou dans la couche de service. Le servlet ou l'action appelle le code de couche de service. Personnellement, je pense: la pagination est en fait un besoin commercial, donc elle peut être placée au niveau de l'entreprise. Étant donné que la couche DAO fournit la liste correspondante de la liste [de la requête de condition] et le nombre de statistiques [de condition], la couche commerciale peut faire des appels de méthode en fonction de ses propres besoins (il ne doit être suivi que par des étapes établies. Bien sûr, plusieurs fois, l'entreprise a établi des étapes de processus).
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.