概述
2019独角兽企业重金招聘Python工程师标准>>>
很多时候我们都会用到分页,模版渲染有的用的是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的实现.
- 使用freemarker,可以定义分页宏方便的解决这个问题。
<#macro page pageUrl totalCount pageIndex pageSize>
<#-- 页码为小于1的,恶意翻页的情况直接退出 -->
<#if pageIndex<=0>
<#assign pageIndex=1>
</#if>
<#-- 数量大于总数量,恶意翻页的情况直接退出 -->
<#if ((pageIndex*pageSize-totalCount)>pageSize)>
<#return>
</#if>
<#-- 只有一页的数据就不显示分页了 -->
<#if (totalCount<=pageSize)>
<#return>
</#if>
<nav class="nav-pagination">
<ul class="pagination">
<#assign pageCount=(totalCount/pageSize)?ceiling>
<#if (pageIndex>1)>
<li><a href="${pageUrl+1}" title="首页"><<</a></li>
</#if>
<#if (pageIndex>5)>
<#assign prevPages=pageIndex-9>
<#if prevPages lt 1>
<#assign prevPages=1>
</#if>
<#assign start=pageIndex-4>
<li><a href="${pageUrl+prevPages?c}" title="向前5页">...</a></li>
<#else>
<#assign start=1>
</#if>
<#-- 显示当前页附近的页-->
<#assign end=pageIndex+4>
<#if (end>pageCount)>
<#assign end=pageCount>
</#if>
<#list start..end as index>
<#if pageIndex==index>
<li class="active"><a href="${pageUrl+index?c}"><b>${index?c}</b></a></li>
<#elseif index!=0>
<li><a href="${pageUrl+index?c}">${index?c}</a></li>
</#if>
</#list>
<#--如果后面页数过多,显示"...":-->
<#if (end lt pageCount)>
<#assign endend=end+4>
<#if (endend>pageCount)>
<#assign endend=pageCount>
</#if>
<li><a href="${pageUrl+endend?c}" title="向后5页">...</a><li>
</#if>
<#-- 显示"下一页":-->
<#if (pageIndex lt pageCount)>
<li><a href="${pageUrl+pageCount?c}" title="末页">>></a></li>
</#if>
</nav>
</#macro>
- 使用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("<div class='pagination'><ul>");
int pageCount = (int) (totalCount%pageSize==0?totalCount/pageSize:totalCount/pageSize+1);
int start;
if(pageIndex>1) {
stringBuilder.append("<li><a href='").append(pageUrl).append("1' title='首页'><<</a></li>");
}
if( pageIndex>5 ){
int prevPages = pageIndex-9;
if( prevPages<1 ){
prevPages=1;
}
start = pageIndex-4;
stringBuilder.append("<li><a href='").append(pageUrl).append(prevPages).append("' title='向前5页'>...</a></li>");
}else{
start=1;
}
int end = pageIndex+4;
if( end>pageCount ) end=pageCount;
for(int index=start;index<=end;index++){
if( pageIndex==index ){
stringBuilder.append("<li class='active'><a href='")
.append(pageUrl).append(index)
.append("'><b>").append(index)
.append("</b></a></li>");
}else if(index!=0){
stringBuilder.append("<li><a href='").append(pageUrl).append(index).append("'>").append(index).append("</a></li>");
}
}
if( end<pageCount ){
int endFive = end+4;
if( end>pageCount ){
endFive=pageCount;
}
stringBuilder.append("<li><a href='").append(pageUrl).append(endFive).append("' title='向后5页'>...</a><li>");
}
if( pageIndex<pageCount ){
stringBuilder.append("<li><a href='").append(pageUrl).append(pageCount).append("' title='末页'>>></a></li>");
}
stringBuilder.append("</ul></div>");
return stringBuilder.toString();
}
像这样就可以了,至于传入的url是什么鬼,比如"index.jsp?p="
或者"index.jsp?type=XXX&t=XXX&p="
。
这里我自己定义的页码参数是p,看自己心情喽。
总之不管你使用何种方法,这几个参数是需要的:传入的需要拼接的url,页码pageIndex,一页显示多少数据pageSize, 总共多少totalCount.
https://www.yuxianghe.net/article/23
转载于:https://my.oschina.net/110NotFound/blog/752944
最后
以上就是朴素海燕为你收集整理的freemarker实现分页 jsp实现分页 java内存分页的全部内容,希望文章能够帮你解决freemarker实现分页 jsp实现分页 java内存分页所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复