Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 278|回复: 0

[JSTL学习]分享一个基于jstl的分页代码

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-28 23:56:11 | 显示全部楼层 |阅读模式
    分享一个分页代码(基于标签jstl),希望对大家有用,类似淘宝,javaeye的形式有页块 ,如图:


    package com.ask.page;
    import java.io.Serializable;
    import java.util.List;
    /**
    * 封装分页信息
    *
    */
    public class Pagination<T> implements Serializable {
            private static final long serialVersionUID = -4263336128482001626L;
            private int total; // 总记录数
            private int pageIndex; // 当前页, 从1开始计数
            private int pageSize; // 页大小
            private List<T> items; // 页数据
            private int startRow; // 起始行, 从1开始计数
            private int endRow; // 结束行, 从1开始计数
            private int pageCount;// 总页数
            public Pagination() {
            }
            public Pagination(Pagination<T> page) {
                    this.pageIndex = page.getPageIndex();
                    this.pageSize = page.pageSize;
                    this.startRow = pageSize * (pageIndex - 1) + 1;
                    this.endRow = this.startRow + pageSize - 1;
            }
            public Pagination(int pageIndex, int pageSize) {
                    this.pageIndex = pageIndex <= 0 ? 1 : pageIndex;
                    this.pageSize = pageSize;
                    this.startRow = pageSize * (this.pageIndex - 1) + 1;
                    this.endRow = this.startRow + this.pageSize - 1;
            }
            public int getTotal() {
                    return total;
            }
            public void setTotal(int total) {
                    this.total = total;
                    if (total < pageSize) {
                            this.pageCount = 1;
                    } else {
                            if (total % pageSize == 0) {
                                    this.pageCount = total / pageSize;
                            } else {
                                    this.pageCount = total / pageSize + 1;
                            }
                    }
                    if (pageIndex > pageCount) {
                            this.pageIndex = this.pageCount;
                            startRow = pageSize * (pageIndex - 1) + 1;
                            endRow = startRow + pageSize - 1;
                    }
            }
            public int getPageIndex() {
                    return pageIndex;
            }
            public void setPageIndex(int pageIndex) {
                    this.pageIndex = pageIndex;
            }
            public List<T> getItems() {
                    return items;
            }
            public void setItems(List<T> items) {
                    this.items = items;
            }
            public static long getSerialVersionUID() {
                    return serialVersionUID;
            }
            /**
             * 起始行位置, 从1开始计数
             *
             * @return
             */
            public int getStartRow() {
                    return startRow;
            }
            public void setStartRow(int startRow) {
                    this.startRow = startRow;
            }
            /**
             * 结束行位置, 从1开始计数
             *
             * @return
             */
            public int getEndRow() {
                    if(endRow>getTotal()){
                            return getTotal();
                    }
                    return endRow;
            }
            public void setEndRow(int endRow) {
                    this.endRow = endRow;
            }
            public int getPageCount() {
                    return pageCount;
            }
            public void setPageCount(int pageCount) {
                    this.pageCount = pageCount;
            }
    }[/code]


    public class PageTag extends SimpleTagSupport {
            private Pagination pagination;
            private String baseurl;
            public void setPagination(Pagination pagination) {
                    this.pagination = pagination;
            }
            public void setBaseurl(String baseurl) {
                    this.baseurl = baseurl;
            }
            // 分页区页码最大长度
            private final static int MAX_PAGE_HTML_LENGTH = 8;
            // 首部和尾部连续页码的长度
            private final static int PRE_LAST_PAGE_LENGTH = 5;
            @Override
            public void doTag() throws JspException, IOException {
                    // TODO Auto-generated method stub
                    StringBuilder sb = new StringBuilder();
                    if (pagination == null || pagination.getItems() == null
                                    || pagination.getItems().size() == 0) {
                            getJspContext().getOut().print("");
                            return;
                    }
                    // 上一页
                    if (pagination.getPageCount() > 1) {
                            if (pagination.getPageIndex() == 1) {
                                    sb.append(createPrePage(0, true));
                            } else {
                                    sb.append(createPrePage(pagination.getPageIndex() - 1, false));
                            }
                    }
                    // 当总页数小于8时显示全部页码
                    if (pagination.getPageCount() <= MAX_PAGE_HTML_LENGTH) {
                            for (int i = 1; i <= pagination.getPageCount(); i++) {
                                    if (i == pagination.getPageIndex()) {
                                            sb.append(createPageIndex(i, true));
                                    } else {
                                            sb.append(createPageIndex(i, false));
                                    }
                            }
                    } else {
                            // 当页码小于等于5时
                            if (pagination.getPageIndex() <= PRE_LAST_PAGE_LENGTH) {
                                    sb.append(createHeader(pagination.getPageIndex() + 1,
                                                    pagination));
                                    sb.append(createMiddle(0, pagination));
                                    sb.append(createFooter(pagination));
                            } else if (pagination.getPageIndex() + 4 >= pagination
                                            .getPageCount()) {// 当页码为后5页时
                                    sb.append(createHeader(2, pagination));
                                    sb.append(createMiddle(0, pagination));
                                    sb.append(createFooter(pagination));
                            } else {
                                    sb.append(createHeader(2, pagination));
                                    sb.append(createMiddle(3, pagination));
                                    sb.append(createFooter(pagination));
                            }
                    }
                    // 下一页
                    if (pagination.getPageCount() > 1) {
                            if (pagination.getPageIndex() == pagination.getPageCount()) {
                                    sb.append(createNextPage(0, true));
                            } else {
                                    sb.append(createNextPage(pagination.getPageIndex() + 1, false));
                            }
                    }
                    sb.append(createPageInfo(pagination));
                    getJspContext().getOut().print(sb.toString());
            }
            /**
             * 头部创建
             *
             * @param length
             * @param pagination
             * @return
             */
            private String createHeader(int length, Pagination pagination) {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 1; i <= length; i++) {
                            if (i == pagination.getPageIndex()) {
                                    sb.append(createPageIndex(i, true));
                            } else {
                                    sb.append(createPageIndex(i, false));
                            }
                    }
                    return sb.toString();
            }
            /**
             * 中部创建
             *
             * @param length
             * @param pagination
             * @return
             */
            private String createMiddle(int length, Pagination pagination) {
                    StringBuilder sb = new StringBuilder();
                    if (length == 0) {// 创建点...
                            sb.append(createPoint());
                    } else {
                            sb.append(createPoint());
                            for (int i = pagination.getPageIndex() - 1; i <= pagination
                                            .getPageIndex() + 1; i++) {
                                    if (i == pagination.getPageIndex()) {
                                            sb.append(createPageIndex(i, true));
                                    } else {
                                            sb.append(createPageIndex(i, false));
                                    }
                            }
                            sb.append(createPoint());
                    }
                    return sb.toString();
            }
            /**
             * 尾部创建
             *
             * @param pagination
             * @return
             */
            private String createFooter(Pagination pagination) {
                    StringBuilder sb = new StringBuilder();
                    if (pagination.getPageIndex() <= 5
                                    || pagination.getPageIndex() + 4 < pagination.getPageCount()) {
                            for (int i = pagination.getPageCount() - 1; i <= pagination
                                            .getPageCount(); i++) {
                                    sb.append(createPageIndex(i, false));
                            }
                    } else {
                            for (int i = pagination.getPageIndex() - 1; i <= pagination
                                            .getPageCount(); i++) {
                                    if (i == pagination.getPageIndex()) {
                                            sb.append(createPageIndex(i, true));
                                    } else {
                                            sb.append(createPageIndex(i, false));
                                    }
                            }
                    }
                    return sb.toString();
            }
            private String createPrePage(int pageIndex, boolean distable) {
                    StringBuilder sb = new StringBuilder();
                    if (distable) {
                            sb.append("<span class="disqp">上一页</span>");
                    } else {
                            sb.append("<a href="" + baseurl + getUrlStartChar()+"pageindex=" + pageIndex
                                            + "" class="qp">上一页</a>");
                    }
                    return sb.toString();
            }
            private String createNextPage(int pageIndex, boolean distable) {
                    StringBuilder sb = new StringBuilder();
                    if (distable) {
                            sb.append("<span class="disqp">下一页 </span>");
                    } else {
                            sb.append("<a href="" + baseurl + getUrlStartChar()+"pageindex=" + pageIndex
                                            + "" class="qp">下一页 </a>");
                    }
                    return sb.toString();
            }
            private String createPageIndex(int pageIndex, boolean cur) {
                    StringBuilder sb = new StringBuilder();
                    if (!cur) {
                            sb.append("<a href="" + baseurl + getUrlStartChar()+"pageindex=" + pageIndex + "">");
                            sb.append(pageIndex);
                            sb.append("</a>");
                    } else {
                            sb.append("<span class="focuspage">" + pageIndex + "</span>");
                    }
                    return sb.toString();
            }
            private String createPoint() {
                    return " <span class="point">...</span>";
            }
            private String createPageInfo(Pagination pagination) {
                    return "<span class="info">共<font color=red>" + pagination.getTotal()
                                    + "</font>条  共<font color=red>"
                                    + pagination.getPageCount() + "</font>页</span>";
            }
           
            /**
             * 返回URL参数首字符
             * @return
             */
            private String getUrlStartChar(){
                    if(baseurl.indexOf("?")>=0){
                            return "&";
                    }else{
                            return "?";
                    }
            }
    }[/code]


    body{
      font-size:12px;
    }
    .red_star{
       color:red;
    }
    .pagearea{
       margin-top:20px;
       float:right;
       text-align:right;
       width:100%;
       font-size:12px;
       
    }
    .pagearea .qp{
       border:#AAAADD solid 1px;
       width:60px;
       height:10px;
       margin-right:3px;
       margin-left:3px;
       text-align:center;
    }
    .pagearea .disqp{
       border:#EEEEEE solid 1px;
       width:60px;
       height:10px;
       margin-right:3px;
       margin-left:3px;
       color:#EEEEEE;
    }
    .pagearea a {
       border:#AAAADD solid 1px;
       width:25px;
       height:10px;
       margin-right:3px;
       margin-left:3px;
       text-align:center;
    }
    .pagearea .point{
       width:25px;
       height:10px;
       margin-right:3px;
       margin-left:3px;
    }
    .pagearea .focuspage{
      border:#FD6D01 solid 1px;
      background-color:#FFEDE1;
      color:#FD6D01;
      width:25px;
      height:10px;
      margin-right:3px;
      margin-left:3px;
      font-weight:bold;
      text-align:center;
    }
    .pagearea info{
      color:#666666;
    }
    .pagearea a{
      TEXT-DECORATION:none;
      color:#3366CC;
    }[/code]


    <?xml version="1.0" encoding="UTF-8" ?>
    <taglib xmlns="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
        <tlib-version>1.0</tlib-version>
        <short-name>asktag</short-name>
        <uri>http://com.ask.jstl</uri>
        <tag>
        <name>page</name>
        <tag-class>com.ask.page.taglib.PageTag</tag-class>
        <body-content>empty</body-content>
        <attribute>
          <name>pagination</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
          <name>baseurl</name>
          <required>true</required>
          <rtexprvalue>true</rtexprvalue>
        </attribute>
        </tag>

    </taglib>[/code]

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/28/235611015.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 03:55 , Processed in 0.368774 second(s), 48 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表