标签引入分页

public class PageModel {
    /** 分页总数据条数 */
    private int recordCount;
    /** 当前页面 */
    private int pageIndex;
    /** 每页分多少条数据 */
    private int pageSize = 5;

    /** 总页数 */
    private int totalSize;

    public int getRecordCount() {
        this.recordCount = this.recordCount <= 0 ? 0 : this.recordCount;
        return recordCount;
    }

    public void setRecordCount(int recordCount) {
        this.recordCount = recordCount;
    }

    public int getPageIndex() {
        // this.pageIndex = this.pageIndex;// <= 0?1:this.pageIndex;
        /** 判断当前页面是否超过了总页数:如果超过了默认给最后一页作为当前页 */
        this.pageIndex = this.pageIndex >= this.getTotalSize() ? this.getTotalSize() : this.pageIndex;

        return pageIndex;
    }

    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

    public int getPageSize() {
        // this.pageSize = pageSize;
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    // 计算总页数
    public int getTotalSize() {
        if (this.getRecordCount() <= 0) {
            totalSize = 0;
        } else { // 6-1/5 +1
            totalSize = (this.getRecordCount() - 1) / this.getPageSize() + 1;
        }
        return totalSize;
    }

    // 计算页面的起始索引
    public int getFirstLimitParam() {
        return (this.getPageIndex() - 1) * this.getPageSize() + 1;
    }
}

PageModel

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class PageTag extends SimpleTagSupport {
    /** 定义请求URL中的占位符常量 */
    private static final String TAG = "{0}";

    /** 当前页码 */
    private int pageIndex;
    /** 每页显示的数量 */
    private int pageSize;
    /** 总记录条数 */
    private int recordCount;
    /** 请求URL page.action?pageIndex={0} */
    private String submitUrl;
    /** 样式 */
    private String style = "sabrosus";

    /** 定义总页数 */
    private int totalPage = 0;

    /** 在页面上引用自定义标签就会触发一个标签处理类 */
    @Override
    public void doTag() throws JspException, IOException {
        /** 定义它拼接是终的结果 */
        StringBuilder res = new StringBuilder();
        /** 定义它拼接中间的页码 */
        StringBuilder str = new StringBuilder();
        /** 判断总记录条数 */
        if (recordCount > 0) { // 1499 / 15 = 100
            /** 需要显示分页标签,计算出总页数 需要分多少页 */

            totalPage = (this.recordCount - 1) / this.pageSize + 1;

            /** 判断上一页或下一页需不需要加a标签 */
            if (this.pageIndex == 1) { // 首页
                str.append("<span class=‘disabled‘>上一页</span>");

                /** 计算中间的页码 */
                this.calcPage(str);

                /** 下一页需不需要a标签 */
                if (this.pageIndex == totalPage) {
                    /** 只有一页 */
                    str.append("<span class=‘disabled‘>下一页</span>");
                } else {
                    String tempUrl = this.submitUrl.replace(TAG, String.valueOf(pageIndex + 1));
                    str.append("<a href=‘" + tempUrl + "‘>下一页</a>");
                }
            } else if (this.pageIndex == totalPage) { // 尾页
                String tempUrl = this.submitUrl.replace(TAG, String.valueOf(pageIndex - 1));
                str.append("<a href=‘" + tempUrl + "‘>上一页</a>");

                /** 计算中间的页码 */
                this.calcPage(str);

                str.append("<span class=‘disabled‘>下一页</span>");
            } else { // 中间
                String tempUrl = this.submitUrl.replace(TAG, String.valueOf(pageIndex - 1));
                str.append("<a href=‘" + tempUrl + "‘>上一页</a>");

                /** 计算中间的页码 */
                this.calcPage(str);

                tempUrl = this.submitUrl.replace(TAG, String.valueOf(pageIndex + 1));
                str.append("<a href=‘" + tempUrl + "‘>下一页</a>");
            }

            /** 拼接其它的信息 */
            res.append("<table width=‘100%‘ align=‘center‘ style=‘font-size:13px;‘ class=‘" + style + "‘>");
            res.append("<tr><td style=‘COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; TEXT-DECORATION: none‘>"
                    + str.toString());
            res.append(
                    "&nbsp;跳转到&nbsp;&nbsp;<input style=‘text-align: center;BORDER-RIGHT: #aaaadd 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #aaaadd 1px solid; PADDING-LEFT: 5px; PADDING-BOTTOM: 2px; MARGIN: 2px; BORDER-LEFT: #aaaadd 1px solid; COLOR: #000099; PADDING-TOP: 2px; BORDER-BOTTOM: #aaaadd 1px solid; TEXT-DECORATION: none‘ type=‘text‘ size=‘2‘ id=‘pager_jump_page_size‘/>");
            res.append(
                    "&nbsp;<input type=‘button‘ style=‘text-align: center;BORDER-RIGHT: #dedfde 1px solid; PADDING-RIGHT: 6px; BACKGROUND-POSITION: 50% bottom; BORDER-TOP: #dedfde 1px solid; PADDING-LEFT: 6px; PADDING-BOTTOM: 2px; BORDER-LEFT: #dedfde 1px solid; COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; BORDER-BOTTOM: #dedfde 1px solid; TEXT-DECORATION: none‘ value=‘确定‘ id=‘pager_jump_btn‘/>");
            res.append("</td></tr>");
            res.append(
                    "<tr align=‘center‘><td style=‘font-size:13px;‘><tr><td style=‘COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; TEXT-DECORATION: none‘>");
            /** 开始条数 */
            int startNum = (this.pageIndex - 1) * this.pageSize + 1;
            /** 结束条数 */
            int endNum = (this.pageIndex == this.totalPage) ? this.recordCount : this.pageIndex * this.pageSize;

            res.append(
                    "总共<font color=‘red‘>" + this.recordCount + "</font>条记录,当前显示" + startNum + "-" + endNum + "条记录。");
            res.append("</td></tr>");
            res.append("</table>");
            res.append("<script type=‘text/javascript‘>");
            res.append("   document.getElementById(‘pager_jump_btn‘).onclick = function(){");
            res.append("      var page_size = document.getElementById(‘pager_jump_page_size‘).value;");
            res.append("      if (!/^[1-9]\\d*$/.test(page_size) || page_size < 1 || page_size > " + this.totalPage
                    + "){");
            res.append("          alert(‘请输入[1-" + this.totalPage + "]之间的页码!‘);");
            res.append("      }else{");
            res.append("         var submit_url = ‘" + this.submitUrl + "‘;");
            res.append("         window.location = submit_url.replace(‘" + TAG + "‘, page_size);");
            res.append("      }");
            res.append("}");
            res.append("</script>");

        } else {
            res.append(
                    "<table align=‘center‘ style=‘font-size:13px;‘><tr><td style=‘COLOR: #0061de; MARGIN-RIGHT: 3px; PADDING-TOP: 2px; TEXT-DECORATION: none‘>总共<font color=‘red‘>0</font>条记录,当前显示0-0条记录。</td></tr></table>");
        }
        this.getJspContext().getOut().print(res.toString());
    }

    /** 计算中间页码的方法 */
    private void calcPage(StringBuilder str) {
        /** 判断总页数 */
        if (this.totalPage <= 11) {
            /** 一次性显示全部的页码 */
            for (int i = 1; i <= this.totalPage; i++) {
                if (this.pageIndex == i) {
                    /** 当前页码 */
                    str.append("<span class=‘current‘>" + i + "</span>");
                } else {
                    String tempUrl = this.submitUrl.replace(TAG, String.valueOf(i));
                    str.append("<a href=‘" + tempUrl + "‘>" + i + "</a>");
                }
            }
        } else {
            /** 靠近首页 */
            if (this.pageIndex <= 8) {
                for (int i = 1; i <= 10; i++) {
                    if (this.pageIndex == i) {
                        /** 当前页码 */
                        str.append("<span class=‘current‘>" + i + "</span>");
                    } else {
                        String tempUrl = this.submitUrl.replace(TAG, String.valueOf(i));
                        str.append("<a href=‘" + tempUrl + "‘>" + i + "</a>");
                    }
                }
                str.append("...");
                String tempUrl = this.submitUrl.replace(TAG, String.valueOf(this.totalPage));
                str.append("<a href=‘" + tempUrl + "‘>" + this.totalPage + "</a>");
            }
            /** 靠近尾页 */
            else if (this.pageIndex + 8 >= this.totalPage) {
                String tempUrl = this.submitUrl.replace(TAG, String.valueOf(1));
                str.append("<a href=‘" + tempUrl + "‘>1</a>");
                str.append("...");

                for (int i = this.totalPage - 10; i <= this.totalPage; i++) {
                    if (this.pageIndex == i) {
                        /** 当前页码 */
                        str.append("<span class=‘current‘>" + i + "</span>");
                    } else {
                        tempUrl = this.submitUrl.replace(TAG, String.valueOf(i));
                        str.append("<a href=‘" + tempUrl + "‘>" + i + "</a>");
                    }
                }
            }
            /** 在中间 */
            else {
                String tempUrl = this.submitUrl.replace(TAG, String.valueOf(1));
                str.append("<a href=‘" + tempUrl + "‘>1</a>");
                str.append("...");

                for (int i = this.pageIndex - 4; i <= this.pageIndex + 4; i++) {
                    if (this.pageIndex == i) {
                        /** 当前页码 */
                        str.append("<span class=‘current‘>" + i + "</span>");
                    } else {
                        tempUrl = this.submitUrl.replace(TAG, String.valueOf(i));
                        str.append("<a href=‘" + tempUrl + "‘>" + i + "</a>");
                    }
                }

                str.append("...");
                tempUrl = this.submitUrl.replace(TAG, String.valueOf(this.totalPage));
                str.append("<a href=‘" + tempUrl + "‘>" + this.totalPage + "</a>");
            }
        }
    }

    /** setter 方法 */
    public void setPageIndex(int pageIndex) {
        this.pageIndex = pageIndex;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public void setRecordCount(int recordCount) {
        this.recordCount = recordCount;
    }

    public void setSubmitUrl(String submitUrl) {
        this.submitUrl = submitUrl;
    }

    public void setStyle(String style) {
        this.style = style;
    }
}

PageTag

<?xml version="1.0" encoding="utf-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                        http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
                           version="2.1">

  <!-- 描述 自定义标签版本的一种描述 -->
  <description>Pager 1.0 core library</description>
  <!-- 显示的名称 导包进行的一个展示 -->
  <display-name>Pager core</display-name>
  <!-- 版本号 -->
  <tlib-version>1.0</tlib-version>
  <!-- 短名 -->
  <short-name>fkjava</short-name>
  <!-- uri :导包 -->
  <uri>http://zhulina.pager-tags</uri>

  <!-- 定义一个标签 -->
  <tag>
          <!-- 标签名 -->
          <name>pager</name>
          <!-- 标签处理类 -->
          <tag-class>com.baizhi.zln.util.PageTag</tag-class>
          <!-- 设置标签为空 -->
          <body-content>empty</body-content>

          <!-- 定义标签的属性 -->
          <attribute>
              <!-- 属性名 表示分页的第几页 -->
              <name>pageIndex</name>
              <!-- 必须的 -->
              <required>true</required>
              <!-- run time expression value 为true支持EL表达式 -->
              <rtexprvalue>true</rtexprvalue>
          </attribute>

          <!-- 定义标签的属性 -->
          <attribute>
              <!-- 属性名 表示分页标签 ,每页显示多少条数据 -->
              <name>pageSize</name>
              <!-- 必须的 -->
              <required>true</required>
              <!-- run time expression value 为true支持EL表达式 -->
              <rtexprvalue>true</rtexprvalue>
          </attribute>
          <!-- 定义标签的属性 -->
          <attribute>
              <!-- 属性名  记录分页的总数 -->
              <name>recordCount</name>
              <!-- 必须的 -->
              <required>true</required>
              <!-- run time expression value 为true支持EL表达式 -->
              <rtexprvalue>true</rtexprvalue>
          </attribute>
          <!-- 定义标签的属性 -->
          <attribute>
              <!-- 属性名 -->
              <name>submitUrl</name>
              <!-- 必须的 -->
              <required>true</required>
              <!-- run time expression value 为true支持EL表达式 -->
              <rtexprvalue>true</rtexprvalue>
          </attribute>
          <!-- 定义标签的属性 -->
          <attribute>
              <!-- 属性名 -->
              <name>style</name>
              <!-- 必须的 -->
              <required>false</required>
              <!-- run time expression value 为true支持EL表达式 -->
              <rtexprvalue>true</rtexprvalue>
          </attribute>
  </tag>
</taglib>

page.tld

1. 首先引入上面的工具类

2. 在你的page.tld 文件中修改uri

3. 在jsp 页面中引入

4. 在这个jsp页面中 引入需要添加的参数

 <div style="align-content: center; margin-left: 40%">

          <zhulina:pager pageIndex="${pageModel.pageIndex }"
                         pageSize="${pageModel.pageSize }"
                         recordCount="${sum}"
                         submitUrl="${path }/adminBack/adminBack_listCatoryAdmin?pageIndex={0}"/>
    </div> 

注意:page Index ={0} 这个值不需要动

5.  后台代码

    public String listCatoryAdmin() {
        // 查找类别的所有记录
        sesondCategory = adminBackService.findCategory();
        for (Category category : sesondCategory) {
            System.out.println(category);
        }
        // 查找类别数量
        sum = adminBackService.findALlSumCatory();
        // 分页信息
        pageModel.setRecordCount(sum); // 总共有catogorys.size()条数据

        if (pageIndex == null) {
            pageModel.setPageIndex(1);
        }
        if (pageIndex != null) {
            pageModel.setPageIndex(pageIndex);// 当前页是第一页
        }

        categoryCount = adminBackService.findCountCategory(pageModel.getFirstLimitParam(),
                pageModel.getFirstLimitParam() + 5);
        // 查找指定条数的记录

        return "listCatoryAdmin";
    }

后台代码

注意:只需要向法定发中传递两个参数 一个是起始索引 另外一个是结束索引

而这两个值是根据 总计量数和页面索引记录出来的

我们在这个测试类中只需要向 pageModel 类中传入三个对象

(1). 记录总条数

(2). 当前页也就是默认第一页

注意: 其实是不用判断pageIndex的 只需要在一次使用的时候设置上默认值为第一页即可

可以在这里修改每页显示所少条数据

6. 数据库代码

 <select id="selectCategoryCount" resultMap="myCategorycountMap">
    select * from ( select dd.*, rownum r from dd_category  dd )
     <where>
        <if test="firstParam !=null">
                r &gt;= #{firstParam}
            </if>
            <if test="endParam !=null">
                and r &lt;= #{endParam}
            </if>

     </where>

  </select>

数据库代码

原文地址:https://www.cnblogs.com/zhulina-917/p/11666908.html

时间: 2024-10-03 14:45:14

标签引入分页的相关文章

jsp标签引入

1.静态引入形式<%@ include file="/common/page.jsp" %> 说明:  静态引入方法是随主页一起编译. 2.动态引入形式<jsp:include page=""></jsp:include> 说明:  动态引入方法引入页与主页分别编译成对应的html然后合并到一起. jsp标签引入,布布扣,bubuko.com

一个关于A标签和分页的怪问题!

用bootstrap做了用户电话号码查询的前端页面. 并且用了MVCPager分页. Bootstrap前端页如下: 一开始使用了用A标签,分页成功后,我进入第二页,点击这个A标签,页面会自动跳转到第一页.相当无解..想不通.经过和群里高手交流说可能是A标签的问题..我换成button,问题解决. 其实也可以使用A标签.只需要修改href="javascript:void(0)",就可以了,让A标签不会跳转! <div class="list-group"&g

javascript简介-标签引入-文档输出-语法构成

一.javascript简介 1.javaScript是什么? JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能. 2.javaScript能干什么 可以写一些效果,网页增加色彩 表单验证 .......  3.javaScript历史 开篇 大概在 1992 年,一家称作 N

Java标签实现分页

Java实现标签分页 最近为了开发一个网站,里面要用分页功能,但是之前很少自己写分页标签,又不想用现成框架.所以自己参考了些资料,写了个分页例子测试了一下. 代码主要分为三个类: PageTag 分页标签类 Page 分页bean Constant 设置常量 Page代码: Java代码   /** * * @author byyang * */ public class Page { private int current = 0;  //当前页,默认为第一页 private int size

修改DeDe标签Pagelist分页样式

我们在用dede仿站的时候,调用文章列表页的分页时,我们会用到: {dede:pagelist listitem=”info,index,end,pre,next,pageno” listsize=”5″/} 然而系统默认的解析样式是<li><a href=’http://’>数字</a></li>,但是有时候我们的目标站的分页样式是<a href=’http://’>数字</a>. 因为目标站的CSS里面根本没有这对标签的属性值,因

为什么很多网页里不直接用script标签引入JS文件,而是通过函数新建script,然后添加属性,再来引入呢?

最近在做毕业的项目,发现很多网页里都是通过构建函数的方式来引入JS文件,代码如下: function loadJScript() { var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://***"; document.body.appendChild(script); } 在我看来,<scrip

html body里边的div标签中用 iframe标签 引入其他页面

<html> <body> <div>    <!-- 增加 iframe标签 使内容固定高度,不会超过div的大小  -->     <iframe height="100%" width="100%"  frameBorder=0 src="/JpkcSys/html/left.html"></iframe>     <!--iframe的 height和 widt

JSTL标签引入(web基础学习笔记十八)

一.JSTL包下载和引入 1.0.简介 JSTL全名为JavaServer Pages Standard Tag Library 1.1.下载包 下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/ 1.2.解压 1.3.将lib下的2个jar文件复制到项目WEB-INFO/lib文件夹下 1.4.选择项目buildpath-将包引入 1.5.新建jsp页面将包引入 在页面中加入以下指令: <%@ tagli

&lt;object&gt;标签引入播放器

我们在网页上看到的播放器无外乎WMP/RealOne/Macromedia Flash Player,其他的无非是面板不同,或添加了其他控件,对于计算机上安装的一些播放器也都是编码和解码器的整合,其最核心的编码和解码技术是相同的.例如:网络上最流行的windows media流(asf,wma,wmv格式...),Real流(rm,rmvb...),更有MPEG系列编码格式(MP4/MP3格式...) 视窗系统 Media Video 是微软推出的一种流媒体格式,他是在“同门”的ASF(Adva