หมายเหตุ: ฉันได้เห็นการเพจที่หลากหลายทางออนไลน์ซึ่งหลายคนอ้างว่าเป็นเรื่องธรรมดา แต่บ่อยครั้งที่พวกเขาไม่น่าพอใจ: บางคนเพิ่มข้อมูลที่อยู่ URL ลงในคลาส Paging และบางคนก็ดำเนินการเพจในคลาส Paging (การกระทำนี้เป็นเรื่องของการดำเนินงานฐานข้อมูล) ตอนนี้หลังจากสรุปและการปรับแต่งของฉัน:
ไม่ว่าคุณจะเพจด้วยตนเองหรือใช้ความช่วยเหลือจากกรอบ คลาสเครื่องมือนี้สามารถช่วยให้คุณบรรลุเอฟเฟกต์การเพจเสถียร (รวมถึงฟังก์ชั่นการกำหนดหมายเลขหน้านำทาง) และวิธีการใช้งานค่อนข้างง่าย: ตกลงไร้สาระน้อยกว่ารหัสมีดังนี้:
การทดสอบแพ็คเกจ dao; นำเข้า java.util.list; / *** คลาสเครื่องมือสำหรับการปนเปื้อน* @author อย่าใช้ชื่อสุทธิ*/ PAGER คลาสสาธารณะ <T> {รายการส่วนตัว <T> รายการ; // ผลการบันทึกวัตถุตั้งค่า int รวมทั้งหมด = 0; // บันทึกรวมขีด จำกัด int ส่วนตัว = 20; // จำนวนระเบียนที่แสดงต่อหน้าหน้าส่วนตัวส่วนตัว = 1; // หน้ารวมทั้งหมด INT PAGENUMBER = 1; // หน้าปัจจุบันบูลีนส่วนตัว isFirstPage = false; // ไม่ว่าจะเป็นหน้าแรกบูลีนส่วนตัว iSlastPage = false; // ไม่ว่าจะเป็นหน้าสุดท้ายบูลีนส่วนตัว hastpreviouspage = false; // มีหน้าก่อนหน้าบูลีนส่วนตัว hasnextpage = false; // มีหน้าถัดไป private Int NavigationPages = 8; // จำนวนหน้าการนำทางหมายเลขหน้าส่วนตัว int [] NavigationPagenumbers; // หมายเลขหน้าการนำทางทั้งหมดเพจเจอร์สาธารณะ (ทั้งหมด int, int pagenumber, ขีด จำกัด ); } เพจเจอร์สาธารณะ (ทั้งหมด int, int pagenumber, ขีด จำกัด int) {init (ทั้งหมด, pagenumber, ขีด จำกัด ); } private void init (ทั้งหมด int, int pagenumber, ขีด จำกัด int) {init (ทั้งหมด, pagenumber, ขีด จำกัด ); } private void init (ทั้งหมด int, int pagenumber, ขีด จำกัด int) {// ตั้งค่าพารามิเตอร์พื้นฐาน this.total = ทั้งหมด; this.limit = ขีด จำกัด ; this.pages = (this.total-1)/this.limit+1; // เดิมถูกต้องตามหมายเลขปัจจุบันที่อาจไม่ถูกต้องถ้า (pagenumber <1) {this.pagenumber = 1; } อื่นถ้า (pagenumber> this.pages) {this.pagenumber = this.pages; } else {this.pagenumber = pagenumber; } // หลังจากการตั้งค่าพารามิเตอร์พื้นฐานคำนวณหน้าการนำทาง calcnavigatePagenumbers (); // เช่นเดียวกับการกำหนดขอบเขตหน้า Judgepageboudary (); } /*** คำนวณหน้าการนำทาง* /โมฆะส่วนตัว calcnavigatePagenumbers () {// เมื่อจำนวนหน้าทั้งหมดน้อยกว่าหรือเท่ากับจำนวนหน้านำทางถ้า (หน้า <= naviterpages) {Naviterpagenumbers = ใหม่ int [หน้า]; สำหรับ (int i = 0; i <pages; i ++) {naviterpagenumbers [i] = i+1; }} else {// เมื่อจำนวนหน้าทั้งหมดมากกว่าจำนวนหน้านำทาง NaviGatePagenumbers = Int ใหม่ [NaviGatePages]; int startNum = pagenumber-navigatePages/2; int endnum = pagenumber+NaviGatePages/2; if (startNum <1) {startNum = 1; // (หน้า NavigatePages แรกสำหรับ (int i = 0; i <naviGatePages; i ++) {naviterpagenumbers [i] = startNum ++;}} อื่นถ้า (endnum> หน้า) {endnum = หน้า; // หน้านำทางล่าสุด } else {// หน้ากลางทั้งหมดสำหรับ (int i = 0; i <navigatePages; i ++) {NaviGatePagenumbers [i] = startNum ++; pagenumber! = 1; {int}* / public int getTotal () {return total;} / *** รับจำนวนบันทึกที่แสดงต่อหน้า* @return {int}* / public int getLimit () {return} {int} */ public int getPagenumber () {return pagenumber; Islastpage; .Append (", หน้า ="). ต่อภาคผนวก (หน้า) .append (", pagenumber ="). ผนวก (pagenumber) .append (", limit ="). ผนวก (จำกัด ) .append (", isFirstPage =") .Append (", HasPreviousPage ="). ต่อไป (HasPreviousPage). Append (", HasNextPage =") ต่อท้าย (HasNextPage). i = 1; i <len; i ++) {sb.append ("" naviternpagenumbers [i]); เกี่ยวกับการใช้งาน: ขั้นตอนมีดังนี้:
1). ไม่ว่าจะใช้การสืบค้นแบบมีเงื่อนไขหรือไม่นับจำนวนรายการทั้งหมดที่สอดคล้องกัน
2). สร้างคลาสเพจเจอร์ (พารามิเตอร์ขีด จำกัด สามารถทำได้ตามเบื้องหน้าของตัวเอง)
3). รับพารามิเตอร์ pagenumber ที่ได้รับการแก้ไขโดยอัตโนมัติตามคลาส Pager ที่สร้างขึ้นคูณ -1 และ จำกัด เพื่อใช้เป็นที่ตั้งของบันทึกแรกที่จะสอบถาม
4). ตั้งค่าระเบียนทั้งหมดที่จะตรวจสอบจากตำแหน่งเริ่มต้นจนถึงขีด จำกัด (หากคุณกำลังเพจด้วยตนเองอาจเป็นไปได้ว่าพารามิเตอร์ที่สองคือการชดเชยตำแหน่งของระเบียนสิ้นสุดขึ้นอยู่กับฐานข้อมูล)
5). ตั้งค่ารายการสอบถามโดย [เงื่อนไข] ลงในวัตถุเพจเจอร์และส่งคืน
6). ในเลเยอร์การนำเสนอคุณสามารถใช้วัตถุหน้านี้ผ่าน servlet หรือการกระทำหรือรับวัตถุเพจเจอร์โดยตรง เรื่องเฉพาะของการประกบ URL ควรถูกทิ้งไว้กับเลเยอร์การนำเสนอให้เสร็จสมบูรณ์
int totalCount = integer.valueof (queryCount.uniqueresult (). toString ()); Pager Pager = ใหม่ Pager (TotalCount, Pagenumber, Limit); querylist.setFirstResult ((pager.getPagenumber ()-1)*ขีด จำกัด ); // การประมวลผลการประมวลผลข้อผิดพลาด queryList.setMaxResults (ขีด จำกัด ); Pager.setList (querylist.list ()); เพจเจอร์กลับ;
รหัสด้านบนเป็นตัวอย่างง่ายๆโดยใช้ไฮเบอร์เนต หากคุณใช้หน้าด้วยตนเองให้ทำตามขั้นตอนที่จะใช้
แน่นอนว่าการปนเปื้อนสามารถทำได้ในชั้น DAO หรือในชั้นบริการ servlet หรือการดำเนินการเรียกรหัสเลเยอร์บริการ โดยส่วนตัวแล้วฉันคิดว่า: การเพจนั้นเป็นความต้องการทางธุรกิจดังนั้นจึงสามารถวางไว้ในระดับธุรกิจ เนื่องจากเลเยอร์ DAO ให้รายการ [การสืบค้นเงื่อนไข] ที่สอดคล้องกันและจำนวนสถิติ [เงื่อนไข] เลเยอร์ธุรกิจสามารถเรียกใช้วิธีการตามความต้องการของตัวเอง (จำเป็นต้องปฏิบัติตามขั้นตอนที่กำหนดไว้แน่นอนหลายครั้งธุรกิจได้กำหนดขั้นตอนกระบวนการ)
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น