Pagination adalah fungsi yang umum digunakan dalam proyek web Java. Kemarin, operasi paging sederhana dan paging pencarian diimplementasikan di Spring MVC. Mari kita rekam di sini. Kerangka kerja yang digunakan adalah (mybatis+springmvc+spring).
Pertama, kita membutuhkan kelas alat paginated:
1. Pagination
impor java.io.serializable; / *** pagination*/ halaman kelas publik mengimplementasikan serializable {private static final long serialversionuid = -3198048449643774660l; private int pagenow = 1; // nomor halaman saat ini private int pageSize = 4; // Jumlah catatan yang ditampilkan pada setiap halaman pribadi int totalCount; // Jumlah Total Catatan Private Int TotalPageCount; // Jumlah total halaman @suppresswarnings ("tidak digunakan") startpos int pribadi; // Mulai posisi, mulai dari 0 @suppresswarnings ("tidak digunakan") private boolean hasfirst; // Apakah ada halaman beranda @suppresswarnings ("tidak digunakan") boolean haspre; // Apakah ada halaman @suppresswarnings ("tidak digunakan") private boolean hasnext; // di sana ada halaman @suppress ("tidak dimanfaatkan") hasnext private; Halaman terakhir/ ** * Lewati jumlah total catatan dan halaman saat ini melalui konstruktor * @param totalCount * @param pagenow */ halaman publik (int totalCount, int pagenow) {this.totalcount = totalCount; this.pagenow = pagenow; } / *** Dapatkan jumlah total halaman, jumlah total halaman = Total catatan / jumlah total halaman* @return* / public int getTotalPageCount () {totalPageCount = getTotalCount () / getPageSize (); pengembalian (totalcount % halaman == 0)? TotalPageCount: TotalPageCount + 1; } public void setTotalPageCount (int totalPageCount) {this.totalPageCount = totalPageCount; } public int getPagenow () {return pagenow; } public void setPagenow (int pagenow) {this.pagenow = pagenow; } public int getPageSize () {return pageSize; } public void setPagesize (int pageSize) {this.pagesize = pageSize; } public int getTotalCount () {return totalCount; } public void setTotalCount (int totalCount) {this.totalCount = totalCount; } / ** * Dapatkan posisi awal dari catatan seleksi * @return * / public int getStartPos () {return (pagenow - 1) * pageSize; } public void setStartPos (int startPos) {this.startpos = startPos; } / *** Apakah ini halaman pertama* @return* / public boolean ishasfirst () {return (pagenow == 1)? Salah: Benar; } public void sethasfirst (boolean hasfirst) {this.hasfirst = hasfirst; } / *** Apakah ada beranda* @return* / public boolean ishaspre () {// Jika ada halaman beranda, ada halaman sebelumnya, karena ada halaman beranda, itu bukan halaman pertama. kembalikan ishasfirst ()? Benar: false; } public void setHaspre (boolean haspre) {this.haspre = haspre; } / *** Apakah ada halaman berikutnya* @return* / public boolean ishasnext () {// Jika ada halaman terakhir, ada halaman berikutnya, karena ada halaman terakhir, itu bukan halaman terakhir. kembalikan ishaslast ()? Benar: false; } public void setHasnext (boolean hasnext) {this.hasnext = hasnext; } / *** Apakah ada halaman terakhir* @return* / public boolean ishaslast () {// Jika itu bukan halaman terakhir, akan ada pengembalian halaman terakhir (pagenow == getTotalCount ())? Salah: Benar; } public void sethaslast (boolean haslast) {this.haslast = hasLast; }}Dengan kelas alat ini, pertama -tama tulis pernyataan SQL di file konfigurasi mybatis xxxxmapper.xml, sebagai berikut:
<!-Pagination SQL Pernyataan-> <pilih id = "SelectProductSbyPage" resultMap = "Tipe Nilai Pengembalian"> Pilih * dari nama tabel di mana user_id = #{userid, jdbctype = integer} batas #{startpos}, #{pageze} </select> <! Hitung (*) dari nama tabel di mana user_id = #{userid, jdbctype = integer} </ pilih>Di sini kita dapat melihat bahwa dua <CILT> S perlu lulus masing -masing dalam parameter 3 dan 1. Pada saat ini, tulis antarmuka dalam file DAO yang sesuai Ixxxxdao untuk menulis metode yang sesuai. Nama metode sama dengan nilai atribut ID di mapper.xml:
/** * Pass multiple parameters using annotation method, user product pagination, query by logging in user ID* @param page * @param userId * @return startPos},#{pageSize} */ public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer halaman,@param (value = "userid") integer userid); / ** * Dapatkan informasi dan permintaan kuantitas produk dengan masuk dalam ID pengguna * @param userid * @return */ public long getProductScount (@param (value = "userid") integer userid);Setelah definisi antarmuka selesai, Anda perlu menulis antarmuka bisnis yang sesuai dan metode implementasi, mendefinisikan metode tersebut di antarmuka, dan kemudian menggantinya di kelas implementasi:
/ ** * Produk tampilan halaman * @param permintaan * @param model * @param loginuserid */ void showproductsbypage (permintaan httpservletRequest, model model, int loginuserid);
Metode berikutnya untuk mengimplementasikan kelas adalah dengan memanggil lapisan DAO dan menerima parameter yang dilewati oleh pengontrol untuk melakukan pemrosesan logika bisnis. Permintaan digunakan untuk mendapatkan parameter yang dilewati oleh front-end, dan model digunakan untuk mengembalikan hasil pemrosesan ke halaman JSP.
@Override public void showproductsbyPage (permintaan httpservletRequest, model model, int loginuserid) {string pagenow = request.getParameter ("pagenow"); Halaman halaman = null; Daftar <ProductWithBlobs> Produk = Daftar ArrayList baru <ProductWithBlobs> (); int totalCount = (int) ProductDao.getProductScount (LoginUserID); if (pagenow! = null) {page = halaman baru (totalCount, integer.parseint (pagenow)); allproducts = this.productdao.selectproductsbypage (page.getStartPos (), page.getPageSize (), loginuserid); } else {page = halaman baru (totalCount, 1); allproducts = this.productdao.selectproductsbypage (page.getStartPos (), page.getPageSize (), loginuserid); } model.addattribute ("Produk", Produk); model.addattribute ("halaman", halaman); }Berikutnya adalah penulisan pengontrol. Ketika pengguna perlu melompat ke halaman produk nyata ini, ia harus melalui metode yang sesuai di pengontrol. Proses pemrosesan ini adalah untuk memanggil metode lapisan bisnis untuk menyelesaikan, dan kemudian mengembalikan hasilnya ke tampilan dinamis JSP. Server menghasilkan halaman dan meneruskannya ke klien (browser) untuk kenyataan. Ini adalah proses MVC.
/** * Initialize the "My Products" list JSP page, with paging function* * @param request * @param model * @return */ @RequestMapping(value = "map path", method = RequestMethod.GET) public String showMyProduct(HttpServletRequest request, Model model) { // Get loginUser in SESSION User loginUser = (User) request.getSession (). getAttribute ("LoginUser"); // Tentukan apakah sesi tidak valid if (loginUser == null || "" .Equals (LoginUser)) {return "Redirect:/"; } int loginUserId = loginUser.getUserId (); // ProductService di sini adalah objek dari antarmuka iProductService yang disuntikkan this.productservice.showproductsbypage (permintaan, model, loginuserid); mengembalikan "JSP Path to Jump to"; }Saya tidak akan menulis bagian penerimaan dari halaman JSP. Setiap orang sama, yaitu, mereka menggabungkan JSTL dan EL untuk menulisnya. ;
<!-Fungsi paging mulai-> <div align = "center"> <font size = "2"> Total $ {page.totalPageCount} halaman </font> <font size = "2"> halaman $ {page.pagenow} </font> <a href = "myproductpage? Pagenow = 1" over "over" over "over" noll "noll" noll "noll" noll "noll" noll "noll" noll "noll" n (a noll " >Home</a> <c:choose> <c:when test="${page.pageNow - 1 > 0}"> <a href="myProductPage?pageNow=${page.pageNow - 1}" rel="external nofollow" >Previous page</a> </c:when> <c:when test="${page.pageNow - 1 <= 0}"> <a href="myProductPage?pageNow=1" rel="external nofollow" rel="external nofollow" >Previous page</a> </c:when> </c:choose> <c:choose> <c:when test="${page.totalPageCount==0}"> <a href="myProductPage?pageNow=${page.pageNow}" rel = "eksternal nofollow" rel = "eksternal nofollow"> halaman berikutnya </a> </c: when> <c: when test = "$ {page.pagenow + 1 <page.totalpageCount}"> <a href = "myproductpage? pAGENOW = $ {page.pagenow + 1}" myproductpage <c:when test="${page.pageNow + 1 >= page.totalPageCount}"> <a href="myProductPage?pageNow=${page.totalPageCount}" rel="external nofollow" rel="external nofollow" >Next page</a> </c:when> </c:choose> <c:choose> <c:when test = "$ {page.totalPageCount == 0}"> <a href = "myproductpage? pagenow = $ {page.pagenow}" rel = "eksternal nofollow" rel = "eksternal nofollow"> halaman terakhir </a> </c: kapan> <c: sebaliknya> <a. href = "myproductpage? pagenow = $ {page.totalPageCount}" rel = "nofollow eksternal" rel = "nofollow eksternal"> halaman terakhir </a> </c: sebaliknya> </c: pilih> </div> <!-fungsi fungsi pagination->2. Paging kueri
Mengenai paging kueri, prosesnya kira -kira sama, kecuali bahwa parameter ketiga (di atas adalah loginuserid) perlu menerima parameter input pengguna. Dengan cara ini, kita perlu menerima parameter input pengguna di pengontrol (<sput> di halaman dilewati dalam metode get), dan kemudian menambahkannya ke sesi untuk menyelesaikan paging kueri (di sini, karena hyperlink di "halaman berikutnya", kode yang berbeda. Itu secara terpisah dan memuatnya dengan tag <scerter> ke halaman JSP yang diperlukan, sehingga kode dapat dihindari):
Berikut ini kode untuk pengontrol sebagai referensi:
/ ** * Permintaan produk dengan nama produk * @param permintaan * @param model * @return */ @RequestMapping (value = "alamat peta", method = requestMethod.get) string public stringForProducts (httpservletRequest Request, model model) {httpsession session = request.getSession (); String param = request.getParameter ("param"); String condition = (string) session.getAttribute ("condition"); // Pertama tentukan apakah kondisi dalam sesi kosong jika (kondisi == null) {condition = new string (); session.setAttribute ("kondisi", kondisi); // Jika kondisi dalam sesi kosong, maka tentukan apakah parameter yang ditularkan kosong. Jika kosong, lompat ke halaman hasil pencarian if (param == null || "" .equals (param)) {return "private/space/productearchResult"; }} // Jika sesi tidak kosong dan param kondisi pencarian yang masuk tidak kosong, lalu tetapkan param ke kondisi jika (param! = Null &&! ("". Equals (param))) {condition = param; session.setAttribute ("kondisi", kondisi); } // Gunakan nilai Atribut Kondisi dalam sesi sebagai kondisi kueri this.productservice.showsearchedProductSbyPage (permintaan, model, kondisi); mengembalikan "halaman lompat"; }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.