การปนเปื้อนเป็นฟังก์ชั่นที่ใช้กันทั่วไปในโครงการ Java Web เมื่อวานนี้มีการดำเนินการเพจจิ้งอย่างง่ายและการค้นหาเพจการค้นหาในฤดูใบไม้ผลิ MVC มาบันทึกไว้ที่นี่ เฟรมเวิร์กที่ใช้คือ (MyBatis+SpringMVC+Spring)
ก่อนอื่นเราต้องมีคลาสเครื่องมือ paginated:
1. การปนเปื้อน
นำเข้า java.io.serializable; / *** pagination*/ หน้าคลาสสาธารณะใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = -31980484496437746660L; Private Int Pagenow = 1; // หมายเลขหน้าปัจจุบัน Private INT PAGESIZE = 4; // จำนวนระเบียนที่แสดงในแต่ละหน้ารวม INT TOTALCOUNT; // จำนวนทั้งหมดของบันทึกส่วนตัว int totalpagecount; // จำนวนหน้าทั้งหมด @suppresswarnings ("ไม่ได้ใช้") startpos int ส่วนตัว; // เริ่มต้นตำแหน่งเริ่มจาก 0 @SuppressWarnings ("ไม่ได้ใช้") BOOLEAN ส่วนตัว HASFIRST; // มีโฮมเพจ @Suppresswarnings ("ไม่ได้ใช้") บูลีนส่วนตัว haspre; // มีหน้าก่อนหน้านี้ @SuppressWarnings Haslast; // มีหน้าสุดท้าย/ ** * ผ่านจำนวนระเบียนทั้งหมดและหน้าปัจจุบันผ่านตัวสร้าง * @param TotalCount * @param pagenow */ หน้าสาธารณะ (int totalCount, int pagenow) this.pagenow = pagenow; } / *** รับจำนวนหน้าทั้งหมดจำนวนหน้าทั้งหมด = บันทึกทั้งหมด / จำนวนหน้าทั้งหมด* @return* / public int getToTalPageCount () {TotalPagEcount = getTotalcount () / getPagesize (); Return (TotalCount % PageSize == 0)? TotalPageCount: TotalPageCount + 1; } โมฆะสาธารณะ SettotAlpagecount (int totalPageCount) {this.totalPagecount = TotalPagEcount; } สาธารณะ int getPagenow () {return pagenow; } โมฆะสาธารณะ setpagenow (int pagenow) {this.pagenow = pagenow; } public int getPagesize () {กลับ pageSize; } โมฆะสาธารณะ setPagesize (int pageize) {this.page.ize = pageSize; } public int getTotalcount () {return totalCount; } โมฆะสาธารณะ Settotalcount (int totalCount) {this.totalcount = TotalCount; } / ** * รับตำแหน่งเริ่มต้นของบันทึกการเลือก * @return * / public int getStartPos () {return (pagenow - 1) * pagesize; } โมฆะสาธารณะ setStartPos (int startPos) {this.startPos = startPos; } / *** เป็นหน้าแรก* @return* / บูลีนสาธารณะ ishasfirst () {return (pagenow == 1)? เท็จ: จริง; } โมฆะสาธารณะ sethasfirst (บูลีน hasfirst) {this.hasfirst = hasfirst; } / *** มีหน้าแรก* @return* / บูลีนสาธารณะ ishaspre () {// ถ้ามีหน้าแรกมีหน้าก่อนหน้านี้เนื่องจากมีโฮมเพจไม่ใช่หน้าแรก return ishasfirst ()? จริง: เท็จ; } โมฆะสาธารณะ sethaspre (boolean haspre) {this.haspre = haspre; } / *** มีหน้าถัดไป* @return* / บูลีนสาธารณะ ishasnext () {// ถ้ามีหน้าสุดท้ายมีหน้าถัดไปเนื่องจากมีหน้าสุดท้ายไม่ใช่หน้าสุดท้าย return ishaslast ()? จริง: เท็จ; } โมฆะสาธารณะ sethasnext (boolean hasnext) {this.hasnext = hasnext; } / *** มีหน้าสุดท้าย* @return* / บูลีนสาธารณะ ishaslast () {// ถ้าไม่ใช่หน้าสุดท้ายจะมีการส่งคืนหน้าสุดท้าย (pagenow == getTotalcount ())? เท็จ: จริง; } โมฆะสาธารณะ Sethaslast (Boolean Haslast) {this.haslast = haslast; -ด้วยคลาสเครื่องมือนี้ให้เขียนคำสั่ง SQL ในไฟล์กำหนดค่า XXXXMApper.xml ของ MyBatis ดังต่อไปนี้:
<!-คำสั่ง pagination sql-> <select id = "selectProductSByPage" resultmap = "ประเภทค่าคืน" เลือก * จากชื่อตารางที่ user_id = #{userId, jdbcType = integer} จำกัด #{startPos}, #} resultType = "ยาว"> เลือกนับ (*) จากชื่อตารางที่ user_id = #{userId, jdbcType = จำนวนเต็ม} </select>ที่นี่เราจะเห็นว่าทั้งสอง <Select> จำเป็นต้องผ่านในพารามิเตอร์ 3 และ 1 ตามลำดับ ในเวลานี้เขียนอินเทอร์เฟซในไฟล์ DAO ที่เกี่ยวข้อง ixxxxdao เพื่อเขียนวิธีการที่สอดคล้องกัน ชื่อเมธอดเหมือนกับค่าแอตทริบิวต์ ID ใน mapper.xml:
/ ** * ผ่านพารามิเตอร์หลายพารามิเตอร์โดยใช้วิธีการเพิ่มความคิดเห็น, การแบ่งหน้าผลิตภัณฑ์ของผู้ใช้, แบบสอบถามโดยการเข้าสู่ระบบในรหัสผู้ใช้ * @param หน้า * @param userId * @return startPos},#{pagesize} */ รายการสาธารณะ <ผลิตภัณฑ์> SelectProductSByPage (@Param (value = "startPos" pagesize,@param (value = "userId") ผู้ใช้จำนวนเต็ม); / ** * รับข้อมูลปริมาณผลิตภัณฑ์และแบบสอบถามโดยการเข้าสู่ระบบใน ID ผู้ใช้ * @param userId * @return */ Public Long GetProductScount (@param (value = "userId") ผู้ใช้จำนวนเต็ม);หลังจากคำจำกัดความอินเตอร์เฟสเสร็จสมบูรณ์คุณต้องเขียนอินเทอร์เฟซธุรกิจและวิธีการใช้งานที่เกี่ยวข้องกำหนดวิธีการดังกล่าวในอินเทอร์เฟซแล้วแทนที่ในคลาสการใช้งาน:
/ ** * หน้าจอแสดงผลหน้า * @param คำขอ * @param โมเดล * @param logginuserid */ void showproductsbypage (คำขอ httpservletrequest, โมเดลโมเดล, int loginuserid);
วิธีต่อไปในการใช้คลาสคือการเรียกเลเยอร์ DAO และยอมรับพารามิเตอร์ที่ส่งผ่านโดยคอนโทรลเลอร์เพื่อดำเนินการประมวลผลตรรกะทางธุรกิจ คำขอใช้เพื่อรับพารามิเตอร์ที่ส่งผ่านโดย front-end และใช้โมเดลเพื่อส่งคืนผลลัพธ์การประมวลผลไปยังหน้า JSP
@Override โมฆะสาธารณะ showproductsBypage (คำขอ httpservletrequest, โมเดลโมเดล, int logginuserid) {String pagenow = request.getParameter ("pagenow"); หน้าหน้า = null; รายการ <ProductWithBlobs> ผลิตภัณฑ์ = new ArrayList <ProductWithBlobs> (); int totalCount = (int) productDao.getProductScount (logginUserId); if (pagenow! = null) {page = หน้าใหม่ (TotalCount, Integer.ParseInt (pagenow)); AllProducts = this.productDao.SelectProductSbypage (page.getStartPos (), page.getPagesize (), logginUserId); } else {page = หน้าใหม่ (TotalCount, 1); AllProducts = this.productDao.SelectProductSbypage (page.getStartPos (), page.getPagesize (), logginUserId); } model.addattribute ("ผลิตภัณฑ์", ผลิตภัณฑ์); model.addattribute ("หน้า", หน้า); -ถัดไปคือการเขียนของคอนโทรลเลอร์ เมื่อผู้ใช้ต้องการข้ามไปที่หน้าของผลิตภัณฑ์จริงนี้เขาต้องผ่านวิธีการที่สอดคล้องกันในคอนโทรลเลอร์ กระบวนการประมวลผลนี้คือการเรียกใช้วิธีเลเยอร์ธุรกิจให้เสร็จสมบูรณ์จากนั้นส่งคืนผลลัพธ์ไปยังการแสดงผล JSP แบบไดนามิก เซิร์ฟเวอร์สร้างหน้าและส่งผ่านไปยังไคลเอนต์ (เบราว์เซอร์) เพื่อความเป็นจริง นี่คือกระบวนการ MVC
/ ** * เริ่มต้นรายการ "ผลิตภัณฑ์ของฉัน" หน้า JSP พร้อมฟังก์ชั่นการเพจ * * @param คำขอ * @param โมเดล * @return */ @requestmapping (value = "Map Path", method = requestmethod.get) สตริงสาธารณะ showmyproduct request.getSession (). getAttribute ("logginuser"); // ตรวจสอบว่าเซสชันไม่ถูกต้องถ้า (logginuser == null || "" .equals (logginuser)) {return "redirect:/"; } int logginUserId = logginuser.getUserId (); // productservice ที่นี่เป็นวัตถุของอินเตอร์เฟส iProductService ที่ถูกฉีด this.productService.ShowProductSbypage (คำขอ, โมเดล, loginUserId); กลับ "เส้นทาง JSP เพื่อข้ามไปที่"; -ฉันจะไม่เขียนส่วนการยอมรับของหน้า JSP ทุกคนเหมือนกันนั่นคือพวกเขารวม JSTL และ El เพื่อเขียนมัน (ฉันยังตัดสินเมื่อวนซ้ำหากพารามิเตอร์ที่ยอมรับนั้นว่างเปล่าจากนั้นจะไม่มีผลิตภัณฑ์สำหรับเอาต์พุตเฉพาะเมื่อพารามิเตอร์ที่ยอมรับไม่ว่างจะว่างจะวนออกมาใช้ << c: เมื่อทดสอบ = "$}"> รวมกับ <c: อื่น ๆ
<!-ฟังก์ชั่นการเพจเริ่มต้น-> <div align = "center"> <font size = "2"> รวม $ {page.totalpagecount} หน้า </font> <font size = "2"> หน้า $ {page.pagenow} </font> <a href = "myProductPage? > home </a> <c: เลือก> <c: เมื่อ test = "$ {page.pagenow - 1> 0}"> <a href = "myProductPage? pagenow = $ {page.pagenow - 1}" rel = "external nofoll href = "myProductPage? pagenow = 1" rel = "nofollow ภายนอก" rel = "nofollow ภายนอก"> หน้าก่อนหน้า </a> </c: เมื่อ> </c: เลือก> <c: เลือก> <c: เมื่อทดสอบ = "$ {page.totalPagecount == 0}" rel = "ภายนอก nofollow" rel = "external nofollow"> หน้าถัดไป </a> </c: เมื่อ> <c: เมื่อทดสอบ = "$ {page.pagenow + 1 <page.totalpagecount}"> <a href = "myProductPage? pagenow = $ {หน้า <c: เมื่อ test = "$ {page.pagenow + 1> = page.totalpagecount}"> <a href = "myProductPage? pagenow = $ {page.totalpagecount}" rel = "ภายนอก nofoll test = "$ {page.totalPageCount == 0}"> <a href = "myProductPage? pagenow = $ {page.pagenow}" rel = "external nofollow" rel = "external nofoll href = "myProductPage? pagenow = $ {page.totalPageCount}" rel = "ภายนอก nofollow" rel = "external nofollow"> หน้าสุดท้าย </a> </c: มิฉะนั้น> </c: เลือก> </div> <!2. การสอบถามเพจ
เกี่ยวกับการสอบถามการสอบถามกระบวนการนี้จะเหมือนกันยกเว้นพารามิเตอร์ที่สาม (ข้างต้นคือ logginuserId) จำเป็นต้องยอมรับพารามิเตอร์อินพุตของผู้ใช้ ด้วยวิธีนี้เราจำเป็นต้องยอมรับพารามิเตอร์อินพุตผู้ใช้ในคอนโทรลเลอร์ (<put> ในหน้าจะถูกส่งผ่านในวิธีการรับ) จากนั้นเพิ่มลงในเซสชันเพื่อให้เพจการสอบถามเสร็จสมบูรณ์ (ที่นี่เนื่องจากการเชื่อมโยงหลายมิติใน "หน้าถัดไป" หน้า JSP ที่แตกต่างกัน แยกจากกันและโหลดด้วยแท็ก <couald> ไปยังหน้า JSP ที่ต้องการเพื่อให้สามารถหลีกเลี่ยงรหัสได้):
นี่คือรหัสสำหรับคอนโทรลเลอร์เป็นข้อมูลอ้างอิง:
/ ** * สอบถามผลิตภัณฑ์ตามชื่อผลิตภัณฑ์ * @param Request * @param Model * @return */ @requestmapping (value = "ที่อยู่แผนที่", method = requestMethod.get) สตริงสาธารณะ SearchForProducts (httpservletRequest, โมเดลโมเดล) String param = request.getParameter ("param"); String Condition = (String) Session.getAttribute ("เงื่อนไข"); // ก่อนอื่นตรวจสอบว่าเงื่อนไขในเซสชันนั้นว่างเปล่าถ้า (เงื่อนไข == null) {เงื่อนไข = สตริงใหม่ (); session.setAttribute ("เงื่อนไข", เงื่อนไข); // หากเงื่อนไขในเซสชันว่างเปล่าให้พิจารณาว่าพารามิเตอร์ที่ผ่านนั้นว่างเปล่าหรือไม่ หากว่างเปล่าให้ข้ามไปที่หน้าผลลัพธ์การค้นหาถ้า (param == null || "" .equals (param)) {return "ส่วนตัว/Space/ProductionSearchResult"; }} // ถ้าเซสชันไม่ว่างเปล่าและพารามิเตอร์เงื่อนไขการค้นหาขาเข้าไม่ว่างเปล่าจากนั้นกำหนด param ให้กับเงื่อนไขถ้า (param! = null &&! ("". เท่ากับ (param))) {เงื่อนไข = param; session.setAttribute ("เงื่อนไข", เงื่อนไข); } // ใช้ค่าแอตทริบิวต์เงื่อนไขในเซสชันเป็นเงื่อนไขการสืบค้น this.productservice.showsearchedProductSbypage (คำขอ, โมเดล, เงื่อนไข); กลับ "หน้ากระโดด"; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น