มีสองวิธีการใช้งานเพจทั่วไป:
1. แก้ไข SQL ทุกครั้งที่คุณเปิดหน้าผ่านพารามิเตอร์ที่เกี่ยวข้องไปยัง SQL และไปที่ฐานข้อมูลเพื่อค้นหาข้อมูลของหน้าแบบเรียลไทม์และแสดง
2. ค้นหาข้อมูลทั้งหมดในตารางที่แน่นอนในฐานข้อมูลจากนั้นรับและแสดงข้อมูลบางอย่างโดยการประมวลผลในตรรกะทางธุรกิจ
สำหรับระบบการจัดการอย่างง่ายที่มีข้อมูลจำนวนเล็กน้อยวิธีการใช้งานครั้งแรกนั้นค่อนข้างง่ายต่อการใช้รหัสน้อยกว่าเพื่อใช้งานฟังก์ชั่นของการเพจ บทความนี้ยังแนะนำวิธีนี้ให้คุณ:
รหัสตัวอย่าง:
1. page.java
แพ็คเกจ com.cm.cmontract.common; นำเข้า org.apache.commons.lang.stringutils; นำเข้า org.apache.commons.lang.builder.toStringBuilder; / ** คลาส Pagination*@author Fengwei*@date 2016-5-23*/ หน้าคลาสสาธารณะใช้ java.io.serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1l; // หน้าก่อนหน้าบูลีนส่วนตัว hasprepage; // หน้าถัดไปบูลีนส่วนตัว hasnextpage; // จำนวนรายการที่แสดงต่อหน้า: ค่าเริ่มต้น 20 ส่วนตัวยาวทุกหน้า = 20L; // จำนวนหน้ารวมหน้ารวมส่วนตัวทั้งหมด; // หน้าปัจจุบัน: หน้าเริ่มต้น 1 Private Long CurrentPage = 1L; // เริ่ม Subscript Private Long Beginindex; // End Subscript Private Long Endinindex; // จำนวนรวมที่มีความยาวส่วนตัวกี่คน; // การเรียงลำดับคอลัมน์ชื่อสตริงส่วนตัว SortName; // การเรียงลำดับสถานะสตริงส่วนตัว SortState; // การเรียงลำดับข้อมูลสตริงส่วนตัว sortinfo; // การเรียงลำดับว่าจะเรียงลำดับบูลีนส่วนตัว sort = false; สตริงส่วนตัว defaultInfo = ""; สตริงสาธารณะ getDefaultInfo () {return defaultInfo; } โมฆะสาธารณะ setDefaultInfo (สตริง defaultInfo) {this.defaultInfo = defaultInfo; } สตริงสาธารณะ getSortInfo () {return sortinfo; } โมฆะสาธารณะ setSortInfo (String sortInfo) {this.sortInfo = sortInfo; } สตริงสาธารณะ getSortName () {return sortName; } โมฆะสาธารณะ setSortName (SortName String) {SetPagesOrtState (sortName); } สตริงสาธารณะ getSortState () {return sortState; } โมฆะสาธารณะ setSortState (String sortState) {this.sortState = sortState; } หน้าสาธารณะ () {} / *** ใช้กันทั่วไปใช้ในการคำนวณเพจ** / หน้าสาธารณะ (TotalRecords ยาว) {this.totalcount = TotalRecords; settotalpage (getTotalPage (TotalRecords)); } / ** * ใช้ * เมื่อตั้งค่าจำนวนรายการที่แสดงในแต่ละหน้า * * / หน้าสาธารณะ (ยาวทุกหน้า, totalRecords ยาว) {this.everyPage = ทุกหน้า; this.totalcount = TotalRecords; settotalpage (getTotalPage (TotalRecords)); } / *** รหัสสถานะสถานะสถานะ @param* @param ค่าจำนวนหน้าที่จะไปที่หรือตั้งค่าจำนวนไอเท็มที่จะแสดงต่อหน้าหรือเรียงลำดับเป็นชื่อคอลัมน์การเรียงลำดับ* / โมฆะสาธารณะ pageState (ดัชนี int, ค่าสตริง) {sort = false; สวิตช์ (ดัชนี) {กรณี 0: setEveryPage (long.parselong (ค่า)); break; กรณีที่ 1: ครั้งแรก (); ทำลาย; กรณีที่ 2: ก่อนหน้า (); ทำลาย; กรณีที่ 3: ถัดไป (); ทำลาย; กรณีที่ 4: สุดท้าย (); Break; กรณีที่ 5: sort = true; sort (value); break; กรณีที่ 6: // ถึงหน้า setCurrentPage ที่ระบุ (long.parselong (ค่า)); หยุดพัก; }} / *** หน้าก่อนหน้า* / โมฆะส่วนตัวก่อน () {currentPage = 1l; } โมฆะส่วนตัวก่อนหน้า () {CurrentPage--; } โมฆะส่วนตัว next () {currentPage ++; } โมฆะส่วนตัวสุดท้าย () {currentPage = TotalPage; } การเรียงลำดับโมฆะส่วนตัว (SortName String) {// ตั้งค่าสถานะการเรียงลำดับ SetPagesortState (sortName); } / *** คำนวณจำนวนหน้าทั้งหมด** / ส่วนตัวยาว getTotalPage (TotalRecords ยาว) {Long TotalPage = 0L; EveryPePage = EveryPePage == NULL? 10L: ทุกหน้า; if (TotalRecords % Everypage == 0) TotalPage = TotalRecords / EveryPepage; else {totalPage = totalRecords / EveryPePAGE + 1; } return totalPage; } สาธารณะยาว getBeginIndex () {this.beginindex = (currentPage - 1) * ทุกหน้า; ส่งคืนสิ่งนี้ BeginIndex; } โมฆะสาธารณะ setBegInIndex (Long BeginIndex) {this.beginindex = startIndex; } สาธารณะยาว getCurrentPage () {this.currentPage = currentPage == 0? 1: CurrentPage; ส่งคืนสิ่งนี้ currentpage; } โมฆะสาธารณะ setCurrentPage (Long CurrentPage) {ถ้า (0 == CurrentPage) {CurrentPage = 1L; } this.currentPage = currentPage; } สาธารณะ Long GetEerTerPage () {this.everyPage = EveryPePage == 0? 10: ทุกหน้า; ส่งคืนสิ่งนี้ทุกหน้า; } โมฆะสาธารณะ setEteryPage (ยาวทุกหน้า) {this.everypage = ทุกหน้า; } บูลีนสาธารณะ getHasNextPage () {this.hasNextPage = (currentPage! = TotalPage) && (TotalPage! = 0); ส่งคืนสิ่งนี้ hasnextpage; } โมฆะสาธารณะ sethasNextPage (Boolean HasNextPage) {this.hasNextPage = HasNextPage; } บูลีนสาธารณะ gethasprepage () {this.hasPrepage = currentPage! = 1; ส่งคืนสิ่งนี้ hasprepage; } โมฆะสาธารณะ sethasprepage (boolean hasprepage) {this.hasprepage = hasprepage; } public long getTotalPage () {return this.totalpage; } โมฆะสาธารณะ settotalPage (Long TotalPage) {ถ้า (this.currentPage> TotalPage) {this.currentPage = TotalPage; } this.totalPage = TotalPage; } public Long getTotalcount () {return this.totalcount; } โมฆะสาธารณะ Settotalcount (Long TotalCount) {SetTotAlpage (getTotalPage (TotalCount)); this.totalcount = TotalCount; } @Override สตริงสาธารณะ toString () {return toStringBuilder.reflectionToString (นี่); } /*** ตั้งค่าสถานะการเรียงลำดับ** /โมฆะส่วนตัว setPagesortState (สตริง newPagesortName) {// ตัดสินว่าฟิลด์การเรียงลำดับก่อนหน้านั้นว่างเปล่าหรือไม่ถ้า (stringUtils.isEmpty (sortName)) {// การเรียงลำดับเริ่มต้น this.sortinfo = pageUtil.page_asc; } else {if (stringutils.equalsignorecase (newPagesortName, sortName)) {// ตัดสินค่าสถานะการเรียงลำดับของการเรียงลำดับถ้า (stringUtils.equalsignorecase (sortState, pageUtil.asc))) this.sortinfo = pageUtil.page_desc; } else {this.sortState = pageUtil.asc; this.sortinfo = pageUtil.page_asc; }} else {// ค่าเริ่มต้น this.sortState = pageUtil.asc; this.sortinfo = pageUtil.page_asc; }} sortName = newPagesortName.toLowerCase (); } Public Boolean Issort () {Return Sort; } โมฆะสาธารณะ setSort (เรียงลำดับบูลีน) {this.sort = sort; } สาธารณะ Long GetendInindex () {this.endinindex = (CurrentPage) * ทุกหน้า; กลับ Endinindex; } โมฆะสาธารณะ setEndinindex (endinindex ยาว) {this.endinindex = endinindex; - 2. -pagestate.java
แพ็คเกจ com.cm.cmontract.common; นำเข้า org.apache.commons.lang.stringutils; /** คลาสสถานะ pagination* @author fengwei* @date 2016-5-23* /public enum pagestate { /*** ตั้งค่ากี่ชิ้นที่จะแสดงต่อหน้า** /setpage, /*** หน้าแรก** /แรก*************************************************************** หน้าเพื่อไป * */ gopage; / *** @param ค่าดัชนีค่า* @return return index ดัชนีดัชนีดัชนีดัชนีดัชนีดัชนี*/ public static int getordinal (ค่าสตริง) {int index = -1; if (stringUtils.isEmpty (value)) {return index; } สตริง newValue = stringUtils.trim (ค่า) .touppercase (); ลอง {index = valueof (newValue) .ordinal (); } catch (unlegalargumentException e) {} ดัชนีส่งคืน; - 3. pageutil.java
/ ** * คลาสเครื่องมือการแบ่งหน้า * @author fengwei * @date 2016-5-23 */ คลาสสาธารณะ PageUtil {public Static Final String ASC = "ASC"; สตริงสุดท้ายคงที่สาธารณะ desc = "desc"; สตริงสุดท้ายคงที่สาธารณะ page_desc = "↓"; สตริงสุดท้ายคงที่สาธารณะ page_asc = "↑"; สตริงสุดท้ายคงที่สาธารณะ page_null = ""; สตริงสุดท้ายคงที่สาธารณะเซสชั่น _page_key = "หน้า"; / *** เริ่มต้นคลาส Paging* @param initpagesql unpatched query sql* @param จำนวนรวมจำนวนแถวทั้งหมด* @param ดัชนีการเพจเพงสถานะ* @param ค่าเฉพาะเมื่อตั้งค่าจำนวนชิ้นต่อหน้าค่าใช้จ่ายจะไม่เป็นโมฆะ if (index <0) {page = หน้าใหม่ (TotalCount); } else { / ** แสดงกี่ชิ้นต่อหน้า* / long everpage = null == ค่า? 10: Long.parselong (ค่า); / ** รับคลาส Paging ในเซสชันเพื่ออำนวยความสะดวกในการบันทึกสถานะการเพจหน้า*/ page = เซสชันหน้า; Page.SetEveryPage (EverPage); page.settotalcount (TotalCount); } หน้าคืน; } / *** เมื่อหน้าคลิก: โฮมเพจหน้าก่อนหน้าหน้าถัดไปหน้าสุดท้ายเรียงลำดับและหน้าเป็นหน้าแรก* @param ดัชนีการเพจเพงสถานะ* @param ค่าฟิลด์เรียงลำดับหรือหน้าเป็นหน้าแรก* / หน้าคงที่สาธารณะ / ** วิธีการโทรสำหรับการคำนวณการเพจ*/ page.pageState (ดัชนี, ค่า); หน้ากลับ; - 4.DefaultController.java ส่วนนี้สามารถใช้งานได้อย่างยืดหยุ่น
แพ็คเกจ com.cm.cmontract.common; นำเข้า javax.servlet.http.httpservletrequest; นำเข้า Javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.http.httpsession; นำเข้า org.springframework.web.bind.annotation.modelattribute; /** * แยกคำขอสาธารณะและชื่อการตอบกลับ: DefaultController คำอธิบาย: * * @author Fengwei * @date 2016-5-6 3:30:32 PM * /คลาสสาธารณะเริ่มต้น { /** * คลาสประโยคการแบ่งแยกสามชั้นของ Oracel * * @param querysql * คำสั่ง query sql, ไม่ paginated * @param TotalCount * จำนวนผลรวมทั้งหมดที่ได้รับตามแบบสอบถาม SQL * @param columnNamedescorasc * ชื่อคอลัมน์ + วิธีการเรียงลำดับ: ID desc */ page executePage ทั้งหมด } / ** สถานะหน้าสถานะสถานะนี้ถูกสร้างขึ้นบนหน้าและไม่มีส่วนเกี่ยวข้องกับธุรกิจ* / สตริง pageaction = request.getParameter ("pageaction"); ค่าสตริง = request.getParameter ("pageKey"); / ** รับดัชนีเพื่อตัดสินสถานะสถานะหน้า*/ int index = pageState.getOrdinal (pageaction); หน้าหน้า = null; / ** * INDEX <1 มีเพียงสองสถานะ 1 เมื่อการโทรครั้งแรกไม่มีค่าในคลาสสถานะหน้า NULL RETURN -1 2 เมื่อหน้ากำหนดจำนวนชิ้นส่วนที่แสดงต่อหน้า: * ดัชนี = 0 เมื่อมีชิ้นส่วนที่แสดงต่อหน้า if (ดัชนี <1) {page = pageUtil.inintPage (TotalCount, INDEX, ค่า, SessionPage); } else {page = pageUtil.ExecPage (ดัชนี, ค่า, sessionPage); } setSession (คำขอหน้า); หน้ากลับ; } หน้าส่วนตัว getPage (คำขอ httpservletRequest) {หน้าหน้า = (หน้า) request.getSession (). getAttribute (pageUtil.session_page_key); if (page == null) {page = new page (); } หน้าคืน; } การตั้งค่าโมฆะส่วนตัว (คำขอ httpservletRequest หน้าหน้า) {request.getSession (). setAttribute (pageUtil.session_page_key, หน้า); - วิธีใช้:
5. คอนโทรลเลอร์จาวา
/ *** เงื่อนไขการเพจที่เพิ่มเข้ามาโดยรุ่น* วิธีการ ExecutePage เขียนไว้ในคลาสเครื่องมือ* @Param Model*/ @Controller คลาสสาธารณะ cmlogController ขยายค่าเริ่มต้น {@requestmapping ("index.do") โมเดลสาธารณะ model.addattribute ("ชื่อผู้ใช้", namestr); // จำนวนหน้า Long TotalCount = logService.pagecounts (รุ่น); // หน้าแสดงหน้า = executePage (คำขอ, รวม); if (page.issort ()) {model.put ("ordername", page.getSortName ()); model.put ("descasc", page.getSortState ()); } else {model.put ("ordername", "logtime"); model.put ("descasc", "desc"); } model.put ("startIndex", page.getBeginIndex ()); model.put ("endindex", page.getendinindex ()); ModelAndView MV = new ModelAndView (); // Pagination Query Loglist = logService.pagelist (รุ่น); mv.addobject ("loglist", loglist); mv.setViewName ("/jsp/log"); กลับ MV; - 6. ข้อความสอบถามหลายฉบับใน Maybatis
// การสืบค้น pagination <select id = "pagelist" parameterType = "map" resultmap = "baseresultmap"> เลือก ttt.* จาก (เลือก tt.*, rownum rn จาก (เลือก* จาก cm_log <here> <if test = "username! = null การฉีด SQL -> และ type = #{type, jdbctype = varchar} </if> </ที่ไหน> สั่งซื้อโดย $ {ordername} $ {descasc}) tt) ttt <โดยที่> <ถ้าทดสอบ = "startIndex! = null และ startindex! <! [cdata [และ rn <= $ {endindex}]]> </ถ้า> </where> </select> // จำนวนหน้า <select id = "pagecounts" parameterType = "แผนที่" resultType = "ยาว"> เลือกจำนวน (*) จาก cm_log < '%$ {ชื่อผู้ใช้}%' </if> </where> </select> 7. หน้าแผนกต้อนรับส่วนหน้าดัชนี. jsp
// เพียงเพิ่ม div ในเค้าโครงหน้า // ชื่อผู้ใช้เป็นเงื่อนไข // <jsp: param name = "url" value = "/log/index.do?"/> เครื่องหมายคำถามที่ไม่มีเงื่อนไขต้องมีอยู่ <body> <div align = "right" style = "ความสูง: 20"> <jsp: รวมหน้า = "/jsp/page.jsp" value = "/log/index.do? username = $ {username}"/> </jsp: include> </div> </body> 8. หน้าอ้างอิง
<%@ page language = "java" contentType = "ข้อความ/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib คำนำหน้า = "c" uri = "http://java.sun.com/jsp/jstl/core" <c: set var = "path" value = "$ {pageContext.request.contextpath}" /> <c: set var = "url" value = "$ {param.url}" /> <c: set var = "urlParams" value = "$ {param.urlparams} /> <tr> <td colspan = "5"> $ {urlparams} รวม $ {page.totalcount} บันทึกทั้งหมด $ {page.totalpage} หน้าต่อหน้าแสดง $ {page.everypage} ปัจจุบัน $ {page.currentpage} หน้า << หน้าแรก <prepage </c: เมื่อ> <c: มิฉะนั้น> <a href = "$ {pathurl} & pageaction = แรก $ {urlParams}"> << homePage </a> <a href = "$ {pathuRl} & pageaction = ก่อนหน้า <c: เลือก> <c: เมื่อทดสอบ = "$ {page.hasnextPage eq false}"> หน้าถัดไป> หน้าสุดท้าย >> </c: เมื่อ> <c: มิฉะนั้น> <a href = "$ {pathurl} & pageaction = ถัดไป $ {urlparams}"> href = "$ {pathurl} & pageaction = สุดท้าย $ {urlParams}"> หน้าสุดท้าย >> </a> </c: อย่างอื่น> </c เลือก> <select name = "indexchange" id = "indexchange" onchange = "getCurrentPage (this.value);" end = "$ {page.totalpage}" step = "1"> <ค่าตัวเลือก = "$ {index}" $ {page.currentPage EQ ดัชนี? "เลือก": ""}> $ {ดัชนี} หน้า </optup> </c: foreach> </select> แสดงต่อหน้า: <เลือกชื่อ = "EveryDePage" id = "EveryPePage" onChange = "setEveryPage (this.value);"> <c: foreach var = value = "$ {pagecount}" $ {page.everypage eq pagecount? "เลือก": ""}> $ {pageCount} bar </opption> </c: foreach> </select> </td> </td> </tr> <div style = 'display: none'> <a class = listlink id = "indexpagehref" href = '#'> </a document.getElementById ("indexpagehref"); A.href = '$ {pathurl} & pageaction = gopage & pageKey ='+index+'$ {urlParams}'; A.SetAttribute ("onclick", ''); a.click ("return false"); } ฟังก์ชั่น setEeveryPage (ทุกหน้า) {var a = document.getElementById ("indexpageHref"); var currentPage = document.getElementById ('indexchange') ค่า; A.href = '$ {pathurl} & pageaction = setPage & pageKey ='+ทุกหน้า+'$ {urlParams}'; A.SetAttribute ("onclick", ''); a.click ("return false"); } ฟังก์ชัน SortPage (sortName) {var a = document.getElementById ("indexpageHref"); A.href = '$ {pathurl} & pageaction = sort & pageKey ='+sortName+'$ {urlParams}'; A.SetAttribute ("onclick", ''); a.click ("return false"); } </script>ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น