博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freemarker实现分页 jsp实现分页 java内存分页
阅读量:5730 次
发布时间:2019-06-18

本文共 4231 字,大约阅读时间需要 14 分钟。

hot3.png

很多时候我们都会用到分页,模版渲染有的用的是jsp,velocity,freemarker。。。

今天搞了下分页的发现有点烧脑,哈。 首先后台进行分页的时候会直接在sql里面实现,这个都大同小异,这里来说下在内存中分页,先上代码:

java内存分页: 通过传入查询出来的总的list数据,页码页数来得到当页的list数据。

/** * 内存分页,从1开始 * @param list list * @param pageIndex 页码 * @param pageSize 页数 * @param  T * @return T */public static  List pagination(List list, int pageIndex, int pageSize){    final int totalSize = list.size();    pageIndex = pageIndex <= 1 ? 1 : pageIndex;    int startIndex = Math.max((pageIndex - 1) * pageSize, 0);    startIndex = Math.min(startIndex, totalSize);    int endIndex = startIndex + pageSize;    endIndex = Math.min(endIndex, totalSize);    return list.subList(startIndex, endIndex);}

####后台得到数据之后需要由前端渲染得到分页html代码,下面是分别使用freemarker和jsp的实现.

  1. 使用freemarker,可以定义分页宏方便的解决这个问题。
<#macro page pageUrl totalCount pageIndex pageSize>   <#-- 页码为小于1的,恶意翻页的情况直接退出 -->   <#if pageIndex<=0>      <#assign pageIndex=1>   
   <#-- 数量大于总数量,恶意翻页的情况直接退出 -->   <#if ((pageIndex*pageSize-totalCount)>pageSize)>      <#return>   
   <#-- 只有一页的数据就不显示分页了 -->   <#if (totalCount<=pageSize)>      <#return>   
   
      
      <#assign pageCount=(totalCount/pageSize)?ceiling>      <#if (pageIndex>1)>         
  • <<
  •       
          <#if (pageIndex>5)>         <#assign prevPages=pageIndex-9>         <#if prevPages lt 1>            <#assign prevPages=1>         
             <#assign start=pageIndex-4>         
  • ...
  •       <#else>         <#assign start=1>      
          <#-- 显示当前页附近的页-->      <#assign end=pageIndex+4>      <#if (end>pageCount)>         <#assign end=pageCount>      
          <#list start..end as index>         <#if pageIndex==index>            
    ${index?c}         <#elseif index!=0>            
  • ${index?c}
  •          
          
          <#--如果后面页数过多,显示"...":-->      <#if (end lt pageCount)>         <#assign endend=end+4>         <#if (endend>pageCount)>            <#assign endend=pageCount>         
             
  • ...
  •       
          <#-- 显示"下一页":-->      <#if (pageIndex lt pageCount)>         
  • >>
  •       
          
    1. 使用jsp,这里我是直接在java代码里实现的分页插件。
    /**     * 分页工具     * @param pageUrl     * @param pageIndex     * @param pageSize     * @param totalCount     * @return string     */    public static String page(String pageUrl,int pageIndex,int pageSize,long totalCount){        StringBuilder stringBuilder = new StringBuilder("");        if( pageIndex<=0 ){            pageIndex=1;        }        if( (pageIndex*pageSize-totalCount) >pageSize ){            return stringBuilder.toString();  // 恶意翻页        }        if( totalCount<=pageSize ){            return stringBuilder.toString();  //只有一页就不显示了        }        stringBuilder.append("
    "); return stringBuilder.toString(); }

    像这样就可以了,至于传入的url是什么鬼,比如"index.jsp?p="或者"index.jsp?type=XXX&t=XXX&p="

    这里我自己定义的页码参数是p,看自己心情喽。

    总之不管你使用何种方法,这几个参数是需要的:传入的需要拼接的url,页码pageIndex,一页显示多少数据pageSize,  总共多少totalCount.

    转载于:https://my.oschina.net/110NotFound/blog/752944

    你可能感兴趣的文章
    Mysql查询
    查看>>
    数据传输流程和socket简单操作
    查看>>
    利用广播实现ip拨号——示例
    查看>>
    ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)
    查看>>
    OC中KVC的注意点
    查看>>
    JQ入门(至回调函数)
    查看>>
    1112: 零起点学算法19——输出特殊值
    查看>>
    【洛天依】几首歌的翻唱(无伴奏)
    查看>>
    strcspn
    查看>>
    OpenSSL初瞻及本系列的博文的缘由
    查看>>
    ISO8583接口的详细资料
    查看>>
    tmux不自动加载配置文件.tmux.conf
    查看>>
    经验分享:JavaScript小技巧
    查看>>
    [MOSEK] Stupid things when using mosek
    查看>>
    程序实例---栈的顺序实现和链式实现
    查看>>
    服务的使用
    查看>>
    Oracle 用户与模式
    查看>>
    网站开发流程以及HTML5简介(八)
    查看>>
    MairDB 初始数据库与表 (二)
    查看>>
    RabbitMQ】三种Exchange模式——订阅、路由、通配符模式
    查看>>