• Java自定义分页标签的实现


    主要字段含义:

    页号  pagaNo
    页面大小   pageSize
    总记录条数   recordCount
    计算本次一共分多少页   myPageSize
    页号显示开始   start

    页号显示结束   end

    PageTag需要继承TagSupport类用于实现自定义标签。

    import java.io.IOException;
    
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.TagSupport;
    
    public class PageTag extends TagSupport {
    
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        //页号    第几页
        private int pageNo = 1;
        //页面大小,每一页显示几条记录
        private int pageSize = 5;
        //分页操作后台响应类,后台响应servlet
        private String url;
        //总的记录条数,本次分页操作所有的记录总数
        private int recordCount = 0;
        @Override
        public int doEndTag() throws JspException {
            // TODO Auto-generated method stub
            return super.doEndTag();
        }
        @Override
        public int doStartTag() throws JspException {
            // TODO Auto-generated method stub
            //自定义标签的业务逻辑处理,使用分页的相关参数,组织分页标签的内容
            StringBuilder tagContent = new StringBuilder();
            //组织自定义分页标签的css样式表
            tagContent
                      .append("<style type='text/scc'>")
                      .append(".pagination {padding:5px;float:right;font-size:12px;}")
                      .append(".pagination a, .pagination a:link, .pagination a:visited {padding:2px 5px;margin:2px;boder:1px solid #aaaadd;text-decoration:none;color:#006699;}")
                      .append(".pagination a:hover, .pagination a:active {border:1px solid #ff0000;font-weight: bold;background-color: #ff0000; color: #FFF;}")
                      .append(".pagination span.disabled {padding: 2px 5px;margin: 2px;border: 1px solid #eee; color: #ddd;}")
                      .append("</style>");
                      //自定义标签的标签体内容
                      tagContent.append("<div class='pagination'>");
                      if(this.recordCount == 0){
                          //没有查询到结果记录集,则提示没有显示数据
                        tagContent.append("<strong>没有可显示的项目</strong>/r/n");
                      }else{
                          //查询结果有显示数据时,则进行分页处理
                          tagContent.append("<form method='post' action='");
                          tagContent.append(this.getUrl());
                          tagContent.append("' name='qPagerForm'>");
                          //自定义标签的隐藏属性,用来进行页码变换时的表单数据:页码和页面大小
                          tagContent.append("<input type='hidden' name='pageNo' value='1'/>");
                          tagContent.append("<input type='hidden' name='pageSize' value='");
                          tagContent.append(this.getPageSize());
                          tagContent.append(" '/>");
                          tagContent.append("&nbsp;共<strong>");
                          tagContent.append(this.getRecordCount());
                          tagContent.append("</strong>项,<strong>");
                          //计算本次分一共有多少页:不足一页的也算作一页
                          int myPageSize = (int)Math.ceil((double)this.getRecordCount()/this.getPageSize());
                          tagContent.append(myPageSize);
                          tagContent.append("</strong>页:&nbsp;");
                          //防止页面越界的处理
                          if(this.pageNo > myPageSize){
                              this.pageNo = myPageSize;
                          }
                          if(this.pageNo < 1){
                              this.pageNo = 1;
                          }
                          //当前页为第一页时,则上一页不能显示超链接
                          if(this.pageNo == 1){
                              tagContent.append("<span class='disabled'>&laquo;&nbsp;上一页</span>");
                          }else{
                              //当前页不为第一页时,则进行页面链接处理
                              tagContent.append("<a href='javascript:turnOverPage(")
                              .append((pageNo - 1)).append(")'>&laquo;&nbsp;上一页</a>/r/n");
                          }
                          //如果前面页数过多,显示"..."
                          int start = 1;
                          if(this.pageNo > 4){
                              //在前面的页数大于4页情况下,从当前页的前一页开始显示,前面的页数使用...代替
                              start = this.pageNo - 1;
                              tagContent.append("<a herf='javascript:turnOverPage(1)'>1</a>/r/n");
                              tagContent.append("<a herf='javascript:turnOverPage(2)'>2</a>/r/n");
                              tagContent.append("&hellip;/r/n");
                          }
                          //显示当前页附近的页
                          int end = this.pageNo + 1;
                          //如果当前页为最后一页
                          if(end > myPageSize) {
                              //防止end记录的最后一页超出总页数
                              end = myPageSize;
                          }
                          for(int i = start; i <= end; i++){
                              if(pageNo ==i){
                                  //当前页号不需要超链接
                                tagContent.append("<span class='current'>").append(i).append("</span>/r/n");
                              }else{
                                  //当前页前后的几页需要加上超链接
                                  tagContent.append("<a herf=''javascript:turnOverPage(").append(i)
                                  .append(")'>").append(i).append("</a>/r/n");
                              }
                          }
                          //如果后面页数过多,显示"..." 
                         if(end < myPageSize - 2){
                             //使用...替换
                             tagContent.append("&hellip;/r/n");
                         } 
                         if(end < myPageSize - 1){
                             //刚好后面剩余页数为两页
                             tagContent.append("<a herf='javascript:turnOverPage(").append(myPageSize - 1).append(")'>")
                             .append(myPageSize - 1).append("</a>/r/n");
                         }
                         if(end < myPageSize){
                             //刚好后面的页数剩余一页
                             tagContent.append("<a herf='javascript:turnOverPage(").append(myPageSize).append(")'>").append(myPageSize).append("</a>/r/n");
                         }
                         //下一页处理
                         if(pageNo == myPageSize){
                             //如果当前页数为最后一页,则不需要超链接
                             tagContent.append("<span class='disabled'>下一页&nbsp;&raquo;").append("</span>/r/n");
                         }else{
                             //下一页的超链接可以使用
                             tagContent.append("<a herf='javascript:turnOverPage(").append((pageNo + 1)).append(")'>下一页&nbsp;&raquo;</a>/r/n");
                         }
                         tagContent.append("</from>");
                         //拼写js处理函数:当用户点击某一页时,需要将这一页的页码赋值给隐藏表单域,
                         //用来将其作为表单发送给分页响应的servlet
                         tagContent.append("<script language='javascript'>");
                         tagContent.append("function turnOverPage(no){");
                         tagContent.append("if(no>");
                         tagContent.append(myPageSize);
                         tagContent.append("){no=");
                         tagContent.append(myPageSize);
                         tagContent.append(";}");
                         tagContent.append("if(no<1){no=1;}");
                         tagContent.append("document.qPagerForm.pageNo.value=no;");
                         tagContent.append("document.qPagerForm.submit();");
                         tagContent.append("}");
                         tagContent.append("</script>");
                         tagContent.append("</div>");
                      }
                      //输出标签的内容到前台页面
                      try {
                          this.pageContext.getOut().write(tagContent.toString());
                      } catch (IOException e) {
                          //自定义标签输出错误
                         System.out.println("自定义标签输出错误:" + e.getMessage());
                      }
                      return SKIP_BODY;  
        }
        
        public int getPageNo() {
            return pageNo;
        }
        public void setPageNo(int pageNo) {
            this.pageNo = pageNo;
        }
        public int getPageSize() {
            return pageSize;
        }
        public void setPageSize(int pageSize) {
            this.pageSize = pageSize;
        }
        public String getUrl() {
            return url;
        }
        public void setUrl(String url) {
            this.url = url;
        }
        public int getRecordCount() {
            return recordCount;
        }
        public void setRecordCount(int recordCount) {
            this.recordCount = recordCount;
        }
        
    
    }

    分页的javascript函数

    <script language='javascript'>
        function turnOverPage(no){
            if(no > pageSize){
            no = pageSize;
            }
            if(no < 1){
            no = 1;
            }
        document.qPagerForm.pageNo.value=no;
        document.qPagerForm.submit();
        }
    </script>



  • 相关阅读:
    Vue让水平滚动条(scroll bar)固定在浏览器的底部,并且同轴联动
    vue横向滚动条,初始化位置
    VUE父子组件传值,以及子组件调用父组件方法
    获取shell脚本所在路径而非执行路径
    免重装完整迁移ubuntu18.04系统方法
    auth.log大量出现pam_unix(cron:session): session opened for user root by (uid=0)解决办法
    禁用vim的visual模式方便拖选
    ssh端口反向代理与内网穿透
    mysql查询时将时间戳转换为时间格式
    浏览器打印控件分享
  • 原文地址:https://www.cnblogs.com/ssjie/p/4796000.html
Copyright © 2020-2023  润新知