您的位置:首页 > Web前端 > JavaScript

一个分页标签,头疼好好久,写出来去大家共享

2008-11-14 14:45 369 查看
public class PageTag extends BodyTagSupport {
 /** 每页显示的记录数(标签的属性) */
 private int pageSize = 20;

 /** 目的地(标签的属性) */
 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("<table width='98%'>/r/n");
  sb.append("  <tr>/r/n");
  sb.append("    <td colspan='2'>/r/n");
  sb.append("      <div style='font-size: 0;line-height: 0;width: 100%;margin: 0;clear: both;border-top: #cccccc 1px dashed'></div>/r/n");
  sb.append("    </td>/r/n");
  sb.append("  </tr>/r/n");
  sb.append("  <tr>/r/n");
  sb.append("    <td align='left'>/r/n");
  sb.append("      /r/n");
  sb.append("      总 ").append(totalPage).append(" 页,当前第 ").append(pageNo)
    .append(" 页/r/n");
  sb.append("    </td>/r/n");
  sb.append("    <td align='right'>/r/n");
  
  if (pageNo == 1) {
   sb.append("      首页");
   sb.append(" ");
   sb.append("上一页/r/n");

  } else {
   sb.append("      <a href='#' onclick='turnOverPage(1)'>首页</a>/r/n");
   sb.append("       ");
   sb.append("<a href='#' onclick='turnOverPage(")
     .append((pageNo - 1)).append(")'>上一页</a>/r/n");
  }

  sb.append("       ");
  if (pageNo == totalPage) {
   sb.append("下一页");
   sb.append(" ");
   sb.append("尾页/r/n");

  } else {
   sb.append("      <a href='#' onclick='turnOverPage(")
     .append((pageNo + 1)).append(")'>下一页</a>/r/n");
   sb.append("       ");
   sb.append("<a href='#' onclick='turnOverPage(")
    .append(totalPage).append(")'>尾页</a>/r/n");
  }
  sb.append("        跳到 /r/n");
  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("                  /r/n");
  sb.append("    </td>/r/n");
  sb.append("  </tr>/r/n");
  sb.append("</table>/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;
 }

}
在写相关的tld文件,就可以在页面用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐