HINWEIS: Ich habe eine Vielzahl von Paging online gesehen, von denen viele behaupten, gemeinsam zu sein, aber oft sind sie nicht zufriedenstellend: Einige fügen URL -Adressinformationen zur Paging -Klasse hinzu, und einige führen auch Paging -Aktionen in der Paging -Klasse aus (diese Aktion ist völlig eine Frage des Betriebs der Datenbank). Nun, nach meiner Zusammenfassung und Verfeinerung:
Egal, ob Sie sich manuell selbst pagen oder die Hilfe eines Rahmens verwenden. Diese Tool -Klasse kann Ihnen helfen, stabile Paging -Effekte (einschließlich der Navigationsseiten -Nummerierungsfunktion) zu erzielen, und die Verwendungsmethode ist relativ einfach: OK, weniger Unsinn, der Code lautet wie folgt:
Pakettest.dao; importieren java.util.list; / *** Werkzeugklasse für Pagination* @Author nicht den Netto -Namen*/ öffentliche Klasse Pager <T> {private Liste <T> Liste; // Objektdatensatzergebnis Set private int Total = 0; // Total Records Private Int Limit = 20; // Anzahl der pro Seite angezeigten Datensätze private int pages = 1; // Gesamtseiten private int pagenumber = 1; // aktuelle Seite private boolean isfirstpage = false; // ob es die erste Seite ist private boolean islastpage = false; // ob es sich um die letzte Seite handelt private boolean HaspreviousPage = false; // gibt es eine vorherige Seite privat boolean hasNextPage = false; // gibt es eine nächste Seite private int navigationpages = 8; // Anzahl der Navigationsseitennummern privat int [] NavigationSpagenum; // Alle Navigationsseitennummern öffentlicher Pager (int Total, int pagenumber, limit); } public pager (int insgesamt, int pagenumber, int limit) {init (insgesamt, pagenumber, limit); } private void init (int total, int pagenumber, int limit) {init (insgesamt, pageNumber, limit); } private void init (int total, int pagenumber, int limit) {// Setzen Sie die Grundparameter this.total = Total; this.limit = limit; this.Pages = (this.total-1) /this.limit+1; // ursprünglich korrekt gemäß der aktuellen Nummer, die möglicherweise falsch ist, wenn (Pagenumber <1) {this.pagenumber = 1; } else if (pageNumber> this.pages) {this.pagenumber = this.pages; } else {this.pagenumber = pagenumber; } // Berechnen Sie nach der Einstellung der grundlegenden Parameter die Navigationsseite CalcNavigatePagenumbers (); // sowie die Bestimmung der SeitengrenzrichterpageBoudary (); } /*** Berechnen Sie die Navigationsseite* /private void CalcNavigatePagenumbers () {// Wenn die Gesamtzahl der Seiten weniger als oder gleich der Anzahl der Navigationsseiten ist, wenn (Pages <= navigatePages) {navigatepagenumber = new Int [Seiten]; für (int i = 0; i <pages; i ++) {navigatePagenumbers [i] = i+1; }} else {// Wenn die Gesamtzahl der Seiten größer ist als die Anzahl der Navigationsseiten navigatepagenumbers = new int [navigatePages]; int startnum = pageNumber-navigatePages/2; int endnum = pageNumber+navigatePages/2; if (startnum <1) {startNum = 1; // (die erste Seite navigatepages für (int i = 0; i <navigatePages; i ++) {navigatePagenumber [i] = startnum ++;}} else if (endnum> Seiten) {endnum = Seiten; // Die letzte Naviglepages-Seite (int i = navigate-1; i> = 0; i> = 0; } else {// alle Zwischenseiten für (int i = 0; i <navigatepages; i ++) {navigatepagenumber [i] = startNum ++; Pagenumber! = 1; */ public int gettotal () {return Total; GetPagenumber () {Return Pagenumber; HaSpreviousPage () {return HaSprevious Page; .Append (", pagenumber ="). Anhänge (pageNumber) .Append (", limit ="). Anhänge (limit) .Andend (", isfirstpage ="). Anhänge (isFirstpage) .Append (", isLastpage ="). Append (islastpage) .Andpage (apprevel). .Append (", HasNextPage ="). Anhänge (HasNextPage) .Append (", navigatepagenums ="); "+navigatePagenumbers [i]);} SB.Append (", list.size = "+list.size ()); sb.append ("] "); return sb.toString ();}} Über Verwendung: Die Schritte sind wie folgt:
1). Unabhängig davon, ob die bedingte Abfrage verwendet wird, zählen Sie zunächst die entsprechende Gesamtzahl der Einträge.
2). Konstruieren Sie eine Pager -Klasse (die Grenzparameter können gemäß ihrem eigenen Vordergrund durchgeführt werden)
3). Erhalten Sie den Parameter der Pagenumber -Parameter, der automatisch gemäß der konstruierten Pager -Klasse korrigiert wurde, multiplizieren -1 und begrenzt, um als Ort des ersten zu befragten Datensatzes zu dienen.
4). Stellen Sie alle Datensätze ein, die über die Startposition bis zur Grenze überprüft werden sollen. (Wenn Sie manuell paging sind, ist es auch möglich, dass der zweite Parameter je nach Datenbank der Positionsabsatz des Enddatensatzes ist.)
5). Legen Sie die von [Bedingung] abgeleitete Liste in das Pager -Objekt ein und kehren Sie zurück.
6). In der Präsentationsebene können Sie dieses Seitenobjekt über Servlet oder Aktion verwenden oder direkt das Pager -Objekt abrufen. Die spezifische Angelegenheit des Spleißens der URL sollte auch der zu vervollständigen Präsentationsschicht überlassen werden.
int TotalCount = Integer.Valueof (queryCount.uniqueresult (). toString ()); Pager Pager = neuer Pager (TotalCount, Pagenumber, Limit); queryList.setFirstresult ((pager.getPagenumber ()-1)*limit); // fehlertolerante Verarbeitung queryList.setMaxResults (Limit); pager.setList (queryList.list ()); Pager zurückgeben;
Der obige Code ist ein einfaches Beispiel mit Hibernate. Wenn Sie manuelle Seiten verwenden, befolgen Sie die zu verwendenden Schritte.
Natürlich kann die Pagination in der DAO -Ebene oder in der Servicelegelung abgeschlossen werden. Das Servlet oder die Aktion ruft den Service -Layer -Code auf. Persönlich denke ich: Paging ist eigentlich ein geschäftliches Bedürfnis, sodass es in Geschäftsebene platziert werden kann. Da die DAO -Schicht die entsprechende Liste [Bedingungsabfrage] und [Bedingung] Statistiken liefert, kann die Geschäftsschicht Methodenaufrufe entsprechend ihren eigenen Bedürfnissen tätigen (sie muss nur von festgelegten Schritten befolgt werden. Natürlich hat das Unternehmen häufig die Prozessschritte festgelegt).
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.