ترقيم الصفحات وظيفة شائعة الاستخدام في مشاريع الويب Java. بالأمس ، تم تنفيذ عمليات الترحيل البسيطة وترحيل البحث في الربيع MVC. دعنا نسجله هنا. الإطار المستخدم هو (MyBatis+SpringMVC+Spring).
أولاً ، نحتاج إلى فئة أدوات متصفح:
1. ترقيم الصفحات
استيراد java.io.serializable ؛ / *** ترقيم الصفحات*/ صفحة الطبقة العامة تنفذ {private Static Final Long SerialVersionuid = -3198048449643774660L ؛ pagenow private = 1 ؛ // رقم الصفحة الحالي pagesize int = 4 ؛ // عدد السجلات المعروضة في كل صفحة private int totalCount ؛ // إجمالي عدد السجلات الخاصة int totalPageCount ؛ // إجمالي عدد الصفحات suppresswarnings ("غير مستخدمة") private int startPos ؛ // START position ، ابدأ من 0 suppresswarnings ("غير مستخدمة") boolean boolean private ؛ // هل هناك صفحة منزلية @suppresswarnings ("غير مستخدمة") boolean boolean private ؛ // هل هناك صفحة سابقة bootresswarnings ("غير مستخدم") Haslast ؛ // هل هناك صفحة أخيرة/ ** * تمرير العدد الإجمالي للسجلات والصفحة الحالية من خلال المُنشئ * param totalCount * param pagenow */ public page (int totalCount ، int pagenow) {this.totalCount = totalCount ؛ this.pagenow = pagenow ؛ } / *** احصل على إجمالي عدد الصفحات ، إجمالي عدد الصفحات = إجمالي السجلات / العدد الإجمالي للصفحات* regurn* / public int getTotalPageCount () {totalPageCount = getTotalCount () / getPagesize () ؛ العائد (TotalCount ٪ pagesize == 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 ؛ } / ** * احصل على الموضع الأولي لسجل الاختيار * @REGAN * / public int getStartPos () {return (pagenow - 1) * pagesize ؛ } public void setStartPos (int startPos) {this.startpos = startPos ؛ } / *** هل هي الصفحة الأولى* return* / public boolean ishasfirst () {return (pagenow == 1)؟ خطأ: صحيح } public void sethasfirst (boolean hasfirst) {this.hasfirst = hasfirst ؛ } / *** هل هناك صفحة منزلية* @REGAN* / Public Boolean Ishaspre () {// إذا كانت هناك صفحة رئيسية ، فهناك الصفحة السابقة ، لأن هناك صفحة رئيسية ، فهي ليست الصفحة الأولى. إرجاع ishasfirst ()؟ صحيح: خطأ } public void sethaspre (boolean haspre) {this.haspre = haspre ؛ } / *** هل هناك صفحة التالية* @REGAN* / public boolean ISHASNEXT () {// إذا كانت هناك صفحة أخيرة ، فهناك الصفحة التالية ، لأن هناك صفحة أخيرة ، فهي ليست الصفحة الأخيرة. إرجاع ishaslast ()؟ صحيح: خطأ } public void sethasnext (boolean hasnext) {this.hasNext = hasnext ؛ } / *** هل هناك صفحة أخيرة* regurn* / public boolean Ishaslast () {// إذا لم تكن الصفحة الأخيرة ، فستكون هناك عودة في الصفحة الأخيرة (pagenow == getTotalCount ())؟ خطأ: صحيح } public void sethaslast (boolean haslast) {this.haslast = haslast ؛ }}باستخدام فئة الأدوات هذه ، اكتب أولاً عبارة SQL في ملف تكوين XXXXMAPPER.XML ، على النحو التالي:
<!-Pagination SQL state-> SELECT ID = "SelectProductSbypage" resultMap = "نوع قيمة الإرجاع"> حدد * من اسم الجدول حيث user_id = #{userid ، jdbctype = integer} limit #{startPos} ، #{pagesize} </select> <!-الحصول على إجمالي السجلات- resultType = "Long"> حدد Count (*) من اسم الجدول حيث user_id = #{userId ،هنا يمكننا أن نرى أن اثنين من <Select> S يحتاجان إلى تمرير 3 و 1 على التوالي. في هذا الوقت ، اكتب واجهة في ملف DAO المقابل IXXXXDAO لكتابة الطريقة المقابلة. اسم الطريقة هو نفس قيمة سمة المعرف في mapper.xml:
/ ** * تمرير معلمات متعددة باستخدام طريقة التعليق التوضيحي ، وتراجع منتج المستخدم ، والاستعلام عن طريق تسجيل في معرف المستخدم * param صفحة * param userid * @regherpos} ،#{pagesize} */ public list <roducts> selectproductsbypage (param (value = "startPos") pagesize ،@param (value = "userId") عدد صحيح userId) ؛ / ** * احصل على معلومات كمية المنتج والاستعلام عن طريق تسجيل معرف المستخدم * param userId * @RETURN */ public getProductScount (param (value = "userId") userId userD) ؛بعد اكتمال تعريف الواجهة ، تحتاج إلى كتابة واجهة الأعمال المقابلة وطريقة التنفيذ ، وتحديد هذه الطريقة في الواجهة ، ثم تجاوزها في فئة التنفيذ:
/ ** * PAGE DISPLAY PRODUCT * PARAM request * param model * param loginUserID */ void showproductsBypage (request httpservletrequest ، نموذج النموذج ، int loginuserid) ؛
تتمثل الطريقة التالية لتنفيذ الفصل في استدعاء طبقة DAO وقبول المعلمات التي تصدرها وحدة التحكم لأداء معالجة منطق الأعمال. يتم استخدام الطلب للحصول على المعلمات التي تم تمريرها بواسطة الواجهة الأمامية ، ويتم استخدام النموذج لإرجاع نتائج المعالجة إلى صفحة JSP.
Override public void showproductsbypage (طلب httpservletrequest ، نموذج النموذج ، int loginuserId) {String pagenow = request.getParameter ("pagenow") ؛ صفحة الصفحة = فارغة ؛ قائمة <ProductWithBlobs> Products = new ArrayList <ProductWithBlobs> () ؛ int totalCount = (int) productDao.getProductScount (logInUserId) ؛ if (pagenow! = null) {page = صفحة جديدة (TotalCount ، integer.parseint (pagenow)) ؛ allproducts = this.productdao.selectProductSbypage (page.getStartPos () ، page.getPagesize () ، loginuserId) ؛ } آخر {page = صفحة جديدة (TotalCount ، 1) ؛ allproducts = this.productdao.selectProductSbypage (page.getStartPos () ، page.getPagesize () ، loginuserId) ؛ } model.addattribute ("المنتجات" ، المنتجات) ؛ model.addattribute ("page" ، page) ؛ }التالي هو كتابة وحدة التحكم. عندما يحتاج المستخدم إلى القفز إلى صفحة هذا المنتج الحقيقي ، فإنه يحتاج إلى الذهاب من خلال الطريقة المقابلة في وحدة التحكم. تتمثل عملية المعالجة هذه في استدعاء طريقة طبقة العمل لإكمالها ، ثم إرجاع النتيجة إلى شاشة JSP الديناميكية. يقوم الخادم بإنشاء الصفحة وتمريرها إلى العميل (المتصفح) للواقع. هذه عملية MVC.
/ ** * قم بتهيئة صفحة "My Products" قائمة JSP ، مع وظيفة الترحيل * * request request * param model * @RETURN */ REQUESTMAPPING (value = "map path" ، method = requestMethod.get request.getSession (). getAttribute ("loginuser") ؛ // تحديد ما إذا كانت الجلسة غير صالحة إذا (logInUser == null || "" .equals (logInuser)) {return "redirect:/" ؛ } int loginUserId = loginUser.getuserId () ؛ . العودة "JSP PATH للقفز إلى" ؛ }لن أكتب جزء القبول من صفحة JSP. الجميع هو نفسه ، أي أنهم يجمعون بين JSTL و EL لكتابته. (لقد أصدرت أيضًا حكمًا عند الخروج. إذا كانت المعلمات المقبولة فارغة ، فلا يوجد منتج للإخراج. فقط عندما تكون المعلمات المقبولة فارغة ، فهل يتم إخراج الإخراج.
<!-بدء وظيفة الترحيل-> <div align = "center"> <font size = "2"> total $ {page.totalPageCount} page </font> <font size = "2"> page $ {page.pagenow} </font> <a href = "myproductpage؟ pagenow = 1" > الصفحة الرئيسية </a> <c: اختر> <c: عندما test = "$ {page.pagenow - 1> 0}"> <a href = "myProductPage؟ pagenow = $ {page.pagenow - 1}" rel = "external nofollow "> page </a> </c: en> en} href = "myProductPage؟ pagenow = 1" rel = "nofollow الخارجي" rel = "خارجي nofollow"> الصفحة السابقة </a> rel = "nofollow external" rel = "خارجي nofollow"> الصفحة التالية </a> </c: عندما> <c: عندما test = "$ {page.pagenow + 1 <page.totalpageCount}"> <a href = "myProductPage؟ pagenow = $ {page.pagenow + 1} <c: عندما test = "$ {page.pagenow + 1> = page.totalPageCount}"> <a href = "myProductPage؟ pagenow = $ {page.totalpageCount}" rel = "external nof ovolling" rel = "external nofollow "> page </a: en en> <c: test = "$ {page.totalPageCount == 0}"> <a href = "myProductPage؟ pagenow = $ {page.pagenow}" rel = "external nofollow" rel = "nofollow href = "myProductPage؟ pagenow = $ {page.totalPageCount}" rel = "خارجي nofollow" rel = "خارجي nofollow"> الصفحة الأخيرة </a> </c: خلاف ذلك> </c: اختر> </div> <!2. استعلام الترحيل
فيما يتعلق بترحيل الاستعلام ، تكون العملية متماثلة تقريبًا ، باستثناء أن المعلمة الثالثة (أعلاه هي تسجيل الدخول) تحتاج إلى قبول معلمات إدخال المستخدم. وبهذه الطريقة ، نحتاج إلى قبول معلمة إدخال المستخدم في وحدة التحكم (يتم تمرير <Curning> في الصفحة في GET Method) ، ثم إضافتها إلى الجلسة لإكمال ترحيل الاستعلام (هنا ، نظرًا لارتفاع الارتباط التشعبي في "الصفحة التالية" ، يتم استخدام صفحات JSP المختلفة هنا ، حيث تُستخدم الكود المخلص هنا. بشكل منفصل وقم بتحميله باستخدام علامة <supply> إلى صفحة JSP المطلوبة ، بحيث يمكن تجنب الرمز):
فيما يلي رمز وحدة التحكم كمرجع:
/ ** * Quep المنتج حسب اسم المنتج * param request * param model * regurn */ @requestmapping (value = "map address" ، method = requestMethod.get) searchforpucts (httpservletrequest request ، model model) {httpsession session = request.getsession () ؛ سلسلة param = request.getParameter ("param") ؛ شرط السلسلة = (سلسلة) session.getAttribute ("الشرط") ؛ // أولاً حدد ما إذا كان الشرط في الجلسة فارغًا إذا (الشرط == null) {inction = new string () ؛ Session.setAttribute ("الشرط" ، الشرط) ؛ // إذا كان الشرط في الجلسة فارغًا ، فحدد ما إذا كانت المعلمة التي تم تمريرها فارغة. إذا كان فارغًا ، فافقي إلى صفحة نتائج البحث إذا (param == null || "" .equals (param)) {return "private/space/productionsresult" ؛ }} // إذا كانت الجلسة غير فارغة و parm حالة البحث الواردة ليست فارغة ، ثم قم بتعيين param إلى شرط إذا (param! = null &&! (". Session.setAttribute ("الشرط" ، الشرط) ؛ } // استخدم قيمة سمة الشرط في الجلسة كشرط الاستعلام this.productService.ShowsearchedProductSbypage (طلب ، نموذج ، شرط) ؛ إرجاع "صفحة قفز" ؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.