Catatan: Saya telah melihat berbagai paging online, banyak yang mengklaim umum, tetapi seringkali mereka tidak memuaskan: beberapa menambahkan informasi alamat URL ke kelas paging, dan beberapa juga melakukan tindakan paging di kelas paging (tindakan ini sepenuhnya merupakan masalah pengoperasian database). Sekarang, setelah ringkasan dan penyempurnaan saya:
Apakah Anda melakukan paging sendiri secara manual atau menggunakan bantuan kerangka kerja. Kelas alat ini dapat membantu Anda mencapai efek paging yang stabil (termasuk fungsi penomoran halaman navigasi), dan metode penggunaan relatif sederhana: ok, lebih sedikit omong kosong, kodenya adalah sebagai berikut:
Paket test.dao; impor java.util.list; / *** Kelas alat untuk pagination* @author Jangan mengambil nama net*/ kelas publik pager <t> {daftar private <t>; // Hasil Catatan Objek Tetapkan total int private = 0; // Total catatan batas int pribadi = 20; // Jumlah catatan yang ditampilkan per halaman halaman int private = 1; // Total halaman private int pagenumber = 1; // halaman saat ini private boolean isFirstPage = false; // apakah itu halaman pertama private boolean isLastPage = false; // apakah itu halaman terakhir private boolean haspreviouspage = false; // Apakah ada halaman sebelumnya private boolean hasnextpage = false; // Apakah ada halaman berikutnya navigasi int private = 8; // Jumlah Halaman Navigasi Nomor Pribadi int [] NavigationPagenumbers; // semua nomor halaman navigasi pager publik (int total, int pagenumber, batas); } pagar publik (total int, int pagenumber, batas int) {init (total, pagenumber, batas); } private void init (total int, int pagenumber, batas int) {init (total, pagenumber, batas); } private void init (int total, int pagenumber, batas int) {// atur parameter dasar this.total = total; this.limit = batas; this.pages = (this.total-1) /this.limit+1; // Awalnya benar sesuai dengan nomor saat ini yang mungkin salah jika (pagenumber <1) {this.pagenumber = 1; } lain jika (pagenumber> this.pages) {this.pagenumber = this.pages; } else {this.pagenumber = pagenumber; } // Setelah pengaturan parameter dasar, hitung halaman navigasi calcnavigatePagenumbers (); // serta penentuan halaman batas judgepageBoudary (); } /*** Hitung halaman navigasi* /private void calcnavigatePagenumbers () {// Ketika jumlah total halaman kurang dari atau sama dengan jumlah halaman navigasi jika (halaman <= navigatePages) {navigatePagenumbers = baru int [halaman]; untuk (int i = 0; i <halaman; i ++) {navigatePagenumbers [i] = i+1; }} else {// Ketika jumlah total halaman lebih besar dari jumlah halaman navigasi navigatePagenumbers = int int [navigatePages]; int startnum = pagenumber-navigagePages/2; int endnum = pagenumber+navigatePages/2; if (startnum <1) {startNum = 1; // (halaman navigasi pertama untuk (int i = 0; i <navigatePages; i ++) {navigatePagenumbers [i] = startNum ++;}} lain jika (endnum> halaman) {endnum = endnum; // halaman navigasi terakhir untuk (int i = navigagePages-1; i> = 0;//halaman navigage untuk (int i = navigagePages-1; i> = 0; } else {// Semua halaman menengah untuk (int i = 0; i <navigatePages; i ++) {navigatePagenumbers [i] = startnum ++; Pagenumber! = 1; {int}*/ public int getTotal () {return total; int getpagenumber () {return pagenumber; boolean haspreviouspage () {return haspreviousPage; .penpend (", pagenumber ="). append (pagenumber) .append (", limit ="). append (limit). lampai (", isFirstPage ="). append (isFirstpage) .prend (", isLastPage ="). append (isLastpage). .parasi (", HasNextPage ="). Append (HasNextPage). Laporan (", NavigatePagenumbers ="); "+navigatePagenumbers [i]);} sb.append (", list.size = "+list.size ()); sb.append ("] "); return sb.tostring ();}} Tentang Penggunaan: Langkah -langkahnya adalah sebagai berikut:
1). Terlepas dari apakah permintaan bersyarat digunakan, hitung pertama jumlah total entri yang sesuai.
2). Bangun kelas pager (parameter batas dapat dibuat sesuai dengan latar depan mereka sendiri)
3). Dapatkan parameter penagaan yang telah dikoreksi secara otomatis sesuai dengan kelas pager yang dibangun, multipel -1 dan batas untuk berfungsi sebagai lokasi catatan pertama yang akan ditanya.
4). Atur semua catatan untuk diperiksa dari posisi awal hingga batas. (Jika Anda paging secara manual, ada kemungkinan bahwa parameter kedua adalah posisi offset dari catatan akhir, tergantung pada database)
5). Atur daftar yang diminta oleh [kondisi] ke dalam objek pager dan kembali.
6). Di lapisan presentasi, Anda dapat menggunakan objek halaman ini melalui servlet atau tindakan atau secara langsung mendapatkan objek pager. Masalah spesifik penyambungan URL juga harus diserahkan pada lapisan presentasi untuk diselesaikan.
int totalCount = integer.valueof (querycount.Uniqueresult (). ToString ()); Pager pager = pager baru (totalcount, pagenumber, limit); querylist.setFirStresult ((pager.getPagenumber ()-1)*batas); // querylist pemrosesan toleran kesalahan.setMaxResults (batas); pager.setList (querylist.list ()); Return pager;
Kode di atas adalah contoh sederhana menggunakan hibernate. Jika Anda menggunakan halaman manual, ikuti langkah -langkah yang akan digunakan.
Tentu saja, pagination dapat diselesaikan di lapisan DAO atau di lapisan layanan. Servlet atau tindakan memanggil kode lapisan layanan. Secara pribadi, saya pikir: Paging sebenarnya adalah kebutuhan bisnis, sehingga dapat ditempatkan di tingkat bisnis. Karena lapisan DAO menyediakan daftar [Kondisi kueri] yang sesuai dan jumlah statistik [kondisi], lapisan bisnis dapat membuat panggilan metode sesuai dengan kebutuhannya sendiri (hanya perlu diikuti oleh langkah -langkah yang ditetapkan. Tentu saja, berkali -kali, bisnis telah menetapkan langkah -langkah proses).
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.