java分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java分页相关的知识,希望对你有一定的参考价值。

高手给我一个分页的例子啊,带注释的。
我xml结果输出在网页上,但是太多,我如何给分页,希望把所有用到的程序或什么的给个简单的例子。我很菜,请高手千万帮忙,不胜感激!!!

分页想清楚了就没什么难的了。一般有两种(我就知道两种):

1.数据库分页:
/**
* @param pageItems:一页显示条数 currentPage:当前第几页
* @autor godelegant
*/
public List findAll(int pageItems,int currentPage)
StringBuffer sqlStr = new StringBuffer("select * from Product limit ?,?");
...
...
int startIndex = (currentPage-1)*pageItems;);//(currentPage-1)*pageItems能过当前页和页面记录数得到应该从哪条开始取
int endIndex = startIndex+pageItems;
db.getPstmt().setInt(1,startIndex);
db.getPstmt().setInt(2,endIndex);
ResultSet rs = db.getPstmt().executQuery();//假设你已经得到了数据库连接

//以上为mysql的JDBC分页,下面是ORALCE的,差别只在于SQL,所以你换一下SQL就OK:
StringBuffer sqlStr = new StringBuffer("select *,rownum rn from (select * from Product) where rn <=? and rownum >=?");


求总页数的方法很简单,查出所有记录数,除一页显示数。就可以得到

以上是JDBC的,如果使用hibernate等,数据库分页将会变得很简单,只需要设置两个参数,就是从哪取和取多少。

2.代码分页
思路是将数据库中的所有记录都取出来,然后再分页。
/**
* @para items:数据库中的所有记录,你可以使用另一个方法得到,如何查询得到我就不用说了吧
* @autor godelegant
*/
public List findAll(List items,int pageItems,int currentPage)
int startIndex = (currentPage-1)*pageItems;//从哪里开始取
int offset = items.size()-startIndex;//还有多少没有取过

int pageCount = offset>pageItems?pageItems:offset;//如果没有取过的大于需要显示的数,则实现显示数pageCount=pageItems,反之然;

List<Product> pageList = new ArrayList();
for(int i=startIndex,i<startIndex+pageCount,i++)
pageList.add(items.get(i));


return pageList;



写了40分钟,希望对你有用
参考技术A 最好是在业务逻辑(service)层定义好分页的方法,调用DAO层的分页方法咯,其实还是在dao层分页的,不要全部数据读出来再分页,耗内存。 参考技术B 纯粹的JAVA分页意义不大,现在大多用的是框架的分页,每种JEE框架都有自己的分页的机制。

java 分页代码

java========================

/**
* 分页实体类
* @version [版本号, Nov 9, 2011]
*/
public class Page {

private int currentPage;//当前页
private int pageSize; //分页大小
private int totalNum; //总条数
private int totalPage; //总页数
private String url; //url地址
//private Object obj;
private String firstPageUrl;//首页
private String nextPageUrl; //下一页
private String prePageUrl; //上一页
private String lastPageUrl; //尾页


public Page(int currentPage, int pageSize, int totalNum, String url) {
super();
this.pageSize = pageSize;
this.totalNum = totalNum;
this.url = url;
totalPage = totalNum/pageSize;
//如果总条数能不被每页条数整除,总页数加1
if (0!=totalNum%pageSize){
totalPage ++;
}

if (currentPage>totalPage) {//当前页大于总页数时,把总页数的值赋给当前页
this.currentPage = totalPage;
}else if (currentPage<1) {//当前页大于小于0时,当前页为赋值为1
this.currentPage = 1;
}else {
this.currentPage = currentPage;
}

}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalNum() {
return totalNum;
}
public void setTotalNum(int totalNum) {
this.totalNum = totalNum;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}

/**
* 设置首页地址
* create on Nov 10, 2011
*/
public void setFirstPageUrl(){
StringBuffer firstUrl = new StringBuffer(url);
firstUrl.append("currentPage=1&pageSize=").append(pageSize);
this.firstPageUrl = firstUrl.toString();
}
/**
* 得到首页地址
* create on Nov 9, 2011
*/
public String getFirstPageUrl(){
setFirstPageUrl();
return this.firstPageUrl;
}

/**
* 设置尾页地址
* create on Nov 10, 2011
*/
public void setLastPageUrl(){
StringBuffer lastUrl = new StringBuffer(url);
lastUrl.append("currentPage=")
.append(totalPage)
.append("&pageSize=")
.append(pageSize);
this.lastPageUrl = lastUrl.toString();
}

/**
* 得到尾页地址
* create on Nov 9, 2011
*/
public String getLastPageUrl(){
setLastPageUrl();
return this.lastPageUrl;
}

/**
* 设置下一页地址
* create on Nov 10, 2011
*/
public void setNextPageUrl(){
StringBuffer nextUrl = new StringBuffer(url);
nextUrl.append("currentPage=")
.append(currentPage+1)
.append("&pageSize=")
.append(pageSize);
this.nextPageUrl = nextUrl.toString();
}

/**
* 得到下一页地址
* create on Nov 9, 2011
*/
public String getNextPageUrl(){
setNextPageUrl();
return this.nextPageUrl;
}

/**
* 设置上一页地址
* create on Nov 10, 2011
*/
public void setPrePageUrl(){
StringBuffer preUrl = new StringBuffer(url);
preUrl.append("currentPage=")
.append(currentPage-1)
.append("&pageSize=")
.append(pageSize);
this.prePageUrl = preUrl.toString();
}

/**
* 得到上一页地址
* create on Nov 9, 2011
*/
public String getPrePageUrl(){
setPrePageUrl();
return this.prePageUrl;
}

}

 

 

 

jsp=========================

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<div align="center">
<c:choose>
<c:when test="${page.currentPage != 1}">
<!-- 当前页不是首页时,首页和上一页为连接 -->
<a href="${page.firstPageUrl}">首页</a>&nbsp;
<a href="${page.prePageUrl}">上一页</a>&nbsp;
</c:when>
<c:otherwise>
<!-- 当前页是首页时,首页和上一页不为连接 -->
首页&nbsp;上一页&nbsp;
</c:otherwise>
</c:choose>

<!-- 当总页数小于5时,全部页数都列出 -->
<c:if test="${page.totalPage<=5 }">
<c:forEach begin="1" end="${page.totalPage}" var="i" step="1">
<c:if test="${page.currentPage==i}">
${i}
</c:if>
<c:if test="${page.currentPage!=i}">
<a href="${page.url}currentPage=${i}&pageSize=${page.pageSize }">[${i}]</a>
</c:if>
</c:forEach>
</c:if>
<!-- 当总页数大于5时,只列5页,分布在当前页前后 -->
<c:if test="${page.totalPage>5 }">

<!-- begin为比当前页小2页的页数, end为比当前页大2页的页数 -->
<c:set var="begin">${page.currentPage-2}</c:set>
<c:set var="end">${page.currentPage+2}</c:set>

<!-- 当前页小于3时,为了使显示页数为5,把显示页的最后一个向后推相应的页数 -->
<c:if test="${begin<1}">
<c:forEach begin="1" end="${end-begin+1}" var="i" step="1">
<c:if test="${page.currentPage==i}">
${i}
</c:if>
<c:if test="${page.currentPage!=i}">
<a href="${page.url}currentPage=${i}&pageSize=${page.pageSize }">[${i}]</a>
</c:if>
</c:forEach>
</c:if>

<!-- 当前页大于和总页数相差小于3时,为了使显示页数为5,把显示页的最前端的页数向前推 -->
<c:if test="${end>page.totalPage}">
<c:forEach begin="${begin-(end-page.totalPage)}" end="${page.totalPage}" var="i" step="1">
<c:if test="${page.currentPage==i}">
${i}
</c:if>
<c:if test="${page.currentPage!=i}">
<a href="${page.url}currentPage=${i}&pageSize=${page.pageSize }">[${i}]</a>
</c:if>
</c:forEach>
</c:if>

<!-- 当前页大于2,且与总页数的差大于2时,显示当前页前2页到当前页后2页的页数 -->
<c:if test="${begin>=1 and end<=page.totalPage}">
<c:forEach begin="${begin}" end="${end}" var="i" step="1">
<c:if test="${page.currentPage==i}">
${i}
</c:if>
<c:if test="${page.currentPage!=i}">
<a href="${page.url}currentPage=${i}&pageSize=${page.pageSize }">[${i}]</a>
</c:if>
</c:forEach>
</c:if>

</c:if>
<!-- 哇哈哈 -->
<c:choose>
<c:when test="${page.currentPage != page.totalPage}">
<!-- 当前页不是尾页时,下一页和尾页为连接 -->
&nbsp;<a href="${page.nextPageUrl}">下一页</a>&nbsp;
<a href="${page.lastPageUrl}">尾页</a>&nbsp;
</c:when>
<c:otherwise>
<!-- 当前页是尾页时,下一页和尾页不为连接 -->
&nbsp;下一页&nbsp;尾页&nbsp;
</c:otherwise>
</c:choose>

共${page.totalNum}条&nbsp;${page.totalPage}页&nbsp;

<!-- 总页数大于5时,显示跳转框 -->
<c:if test="${page.totalPage>5 }">
<form action="${page.url}pageSize=${page.pageSize }" method="post" style="display:inline">
到<input type="text" name="currentPage" onkeyup="this.value=this.value.replace(/[^\d]/g,‘‘)" onafterpaste="this.value=this.value.replace(/[^\d]/g,‘‘)" size="4" maxlength="9" />页<input type="submit" value="跳转">
</form>
</c:if>
</div>




















































































































































































































































以上是关于java分页的主要内容,如果未能解决你的问题,请参考以下文章

单页分页问题中的多个角度材料表

梦内容页分页标题提取

一个视图中的 CI 多页分页,

以多页分页打印所有数据

CakePHP 2中带有分页分页类的大小为f数组的问题

当我在基于类的视图中应用过滤器时,如何在 django 中使用分页分页。网址总是不断变化我如何跟踪网址