自定義標籤分頁源代碼---第一章

自定義標籤分頁源代碼

 

第一步:創建一個計算分頁總數和生成分頁腳本的類;PageControllerTag.java

 

源代碼如下:

package org.luojs.tag;

 

import java.io.IOException;

import java.util.Enumeration;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.jsp.JspException;

import javax.servlet.jsp.tagext.BodyTagSupport;

 

public class PageControllerTag extends BodyTagSupport {

 

       /** 每頁顯示的記錄數(標籤的屬性) */

       private int pageSize = 5;

 

       /** 目的地(標籤的屬性) */

       private String gotoURI;

 

       /** 總記錄數名 */

       public static final String TOTAL = "total";

 

       /** 當前頁號名 */

       public static final String PAGNENO = "pageNo";

 

       /** 每頁要顯示的記錄數名 */

       public static final String RECORDCOUNT = "pageSize";

 

       /** 目的地名 */

       public static final String GOTOURI = "gotoURI";

 

       // 標籤處理程序

       public int doStartTag() throws JspException {

              /** 當前頁號(從請求對象中得到) */

              int pageNo = 1;

              /** 總記錄數(從請求對象中得到) */

              int total = 0;

              /** 總頁數(計算得出) */

              int totalPage = 1;

 

              HttpServletRequest request = (HttpServletRequest) pageContext

                            .getRequest();

 

              // 要輸出到頁面的HTML文本

              StringBuffer sb = new StringBuffer();

 

              sb.append("\r\n<form method='post' action='' ").append(

                            "name='pageController'>\r\n");

 

              // 獲取所有提交的參數(包括查詢條件參數)

              Enumeration enumeration = request.getParameterNames();

              String name = null;

              String value = null;

              while (enumeration.hasMoreElements()) {

                     name = (String) enumeration.nextElement();

                     value = request.getParameter(name);

 

                     if (name.equals(RECORDCOUNT)) {

                            continue;

                     }

                     // 從請求對象中獲取要跳轉到的頁號

                     if (name.equals(PAGNENO)) {

                            if (null != value && !"".equals(value)) {

                                   pageNo = Integer.parseInt(value);

                            }

                            continue;

                     }

 

                     sb.append("<input type='hidden' name='").append(name).append(

                                   "' value='").append(value).append("'/>\r\n");

              }

 

              // 把當前頁號設置成請求參數

             

              sb.append("<input type='hidden' name='").append(PAGNENO).append(

                            "' value='").append(pageNo).append("'/>\r\n");

 

              // 從請求對象中獲取總記錄數

              String tot = (String) request.getAttribute(TOTAL);

              if (null != tot && !"".equals(tot)) {

                     total = Integer.parseInt(tot);

              }

              // 計算總頁數

              totalPage = getTotalPage(total);

 

              System.out.println("total-->" + total);

 

              sb.append("<br/>\r\n");

              sb

                            .append("&nbsp;\r\n");

              sb.append(" ").append(totalPage).append(" &nbsp;&nbsp;當前第 ").append(pageNo)

                            .append(" \r\n");

              sb

                            .append("&nbsp;\r\n");

              if (pageNo == 1) {

                     sb.append("首頁");

                     sb.append("&nbsp;");

                     sb.append("上一頁\r\n");

 

              } else {

                     sb.append("<a href='#' onclick='turnOverPage(1)'>首頁</a>\r\n");

                     sb.append("&nbsp;");

                     sb.append("<a href='#' onclick='turnOverPage(")

                                   .append((pageNo - 1)).append(")'>上一頁</a>\r\n");

              }

 

              sb.append("&nbsp;");

              if (pageNo == totalPage) {

                     sb.append("下一頁");

                     sb.append("&nbsp;");

                     sb.append("尾頁\r\n");

 

              } else {

                     sb.append("<a href='#' onclick='turnOverPage(")

                                   .append((pageNo + 1)).append(")'>下一頁</a>\r\n");

                     sb.append("&nbsp;");

                     sb.append("<a href='#' onclick='turnOverPage(").append(totalPage)

                                   .append(")'>尾頁</a>\r\n");

              }

 

              sb.append("&nbsp;");

 

              sb.append("跳轉到<select onChange='turnOverPage(this.value)'>\r\n");

 

              for (int i = 1; i <= totalPage; i++) {

                     if (i == pageNo) {

                            sb.append("  <option value='").append(i).append("' selected>")

                                          .append(i).append("</option>\r\n");

                     } else {

                            sb.append("  <option value='").append(i).append("'>")

                                          .append(i).append("</option>\r\n");

                     }

              }

              sb.append("</select>\r\n");

              sb.append("&nbsp;\r\n");

              sb.append("</form>\r\n");

 

              // 生成提交表單的JS

              sb.append("<script language='javascript'>\r\n");

              sb.append("  function turnOverPage(no){\r\n");

              sb.append("    var form = document.pageController;\r\n");

              sb.append("    //頁號越界處理\r\n");

              sb.append("    if(no").append(">").append(totalPage).append(") {\r\n");

              sb.append("        no=").append(totalPage).append(";\r\n");

              sb.append("    }\r\n");

              sb.append("    if(no").append("<=0){\r\n");

              sb.append("        no=1;\r\n");

              sb.append("    }\r\n");

              sb.append("    form.").append(PAGNENO).append(".value=no;\r\n");

              sb.append("    form.action='").append(gotoURI).append("';\r\n");

              sb.append("    form.submit();\r\n");

              sb.append("  }\r\n");

              sb.append("</script>\r\n");

 

              try {

                     pageContext.getOut().println(sb.toString());

              } catch (IOException e) {

 

                     e.printStackTrace();

              }

              return super.doStartTag();

       }

 

       public String getGotoURI() {

              return gotoURI;

       }

 

       public void setGotoURI(String gotoURI) {

              this.gotoURI = gotoURI;

       }

 

       public int getPageSize() {

              return pageSize;

       }

 

       public void setPageSize(int pageSize) {

              this.pageSize = pageSize;

       }

 

       /**

        * 根據總記錄數得到總頁數

        *

        * @return int 總頁數

        */

       private int getTotalPage(int total) {

              int totalPage = 1;

              if (total == 0) {

                     totalPage = 1;

              } else {

                     totalPage = (total % pageSize == 0) ? (total / pageSize) : (total

                                   / pageSize + 1);

              }

 

              return totalPage;

       }

}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章