晕 分页的方法简直多的不象样。
方案1:存储过程
把条件,页码,每页记录数传给后台,后台交给存储过程,存储过程直接返回需要的数据。
方案2:javabean控制。
把条件,页码,每页记录数传给处理的bean,bean挑选出需要的数据包装返回。
方案3:静态翻页
所有数据在本地,数据存放方式有xml数据池,json对象或者自接是js的数组。用脚本控制静态翻页。
还有可以利用近来流行的ajax来做翻页,但是实质还是属于方案1,2
方案1:存储过程
把条件,页码,每页记录数传给后台,后台交给存储过程,存储过程直接返回需要的数据。
方案2:javabean控制。
把条件,页码,每页记录数传给处理的bean,bean挑选出需要的数据包装返回。
方案3:静态翻页
所有数据在本地,数据存放方式有xml数据池,json对象或者自接是js的数组。用脚本控制静态翻页。
还有可以利用近来流行的ajax来做翻页,但是实质还是属于方案1,2
public final DataList resultList(final AdminEntityBean entity,final int currentPage,final int pageSize) {
List resultList=new ArrayList();
try {
Criterion catCriterion=null;
if(entity!=null) { //如果是有栏目的文章,则读取该栏目以及所有子栏目的文章
AdminCatAbstractService catService=(AdminCatAbstractService)this.getDomainCatService();
catCriterion=Expression.in("catEntity",catService.getChildCat(String.valueOf(entity.getId()),true));
}
Session session=HibernateUtil.getSession();
HibernateUtil.beginTransaction(); Criteria criteria=session.createCriteria(this.getDomainClass());
if(entity!=null)
criteria.add(catCriterion);
resultList=criteria.setFirstResult((currentPage-1)*pageSize)
.setMaxResults(pageSize)
.addOrder(Order.desc("topProperty"))
.addOrder(Order.desc("id"))
.list();
HibernateUtil.commitTransaction();
}catch(HibernateException err) {
LoggerUtil.error(err);
HibernateUtil.rollbackTransaction();
}finally {
HibernateUtil.closeSession();
}
DataList dataList=new DataList(resultList,currentPage,pageSize,this.resultCount(entity));
return dataList;
}这是分页时的JSP:
<!--
分页组件。简化分页的操作。
数据集必须置于Context中的results对象中。即request.setAttribute(“results”,对象);
每次操作都会导致form的提交,送出去两个参数,currentPage和paging,currentPage是当前页,paging指示现在在分页,一般在接受端处理currentPage就可以了。
<-->
<%@ page contentType="text/html;charset=gb2312"%>
<%@ include file="/web/include/taglib.jsp" %>
<form action="<%=request.getRequestURL()%>" name="pagerForm" method="post" target="_self">
<%
java.util.Map map=request.getParameterMap();
java.util.Iterator it=map.keySet().iterator();
while(it.hasNext()){
String key=(String)it.next();
String value=((String[])map.get(key))[0];
if(!"currentPage".equals(key)&&!"pageCount".equals(key)&&!"paging".equals(key))
{
%>
<input type="hidden" name="<%=key%>" value="<%=value%>"/>
<%
}
}
%>
<table border="0" align="right" cellspacing="0" addspacing="0">
<tr>
<td align="center" valign="baseline">
共<c:out value="${results.rowsCount}"/>条
</td>
<td align="center">
第<c:out value="${results.currentPage}"/>页
共<c:out value="${results.pageCount}"/>页
<c:if test="${results.currentPage>1}"><span style="cursor:hand" onclick="firstPage()">首页</span></c:if><c:if test="${results.currentPage==1}">首页</c:if>
<c:if test="${results.currentPage>1}"><span style="cursor:hand" onclick="prevPage()">上一页</span></c:if><c:if test="${results.currentPage==1}">上一页</c:if>
<c:if test="${results.currentPage<results.pageCount}"><span style="cursor:hand" onclick="nextPage()">下一页</span></c:if><c:if test="${results.currentPage==results.pageCount}">下一页</c:if>
<c:if test="${results.currentPage<results.pageCount}"><span style="cursor:hand" onclick="lastPage()">尾页</span></c:if><c:if test="${results.currentPage==results.pageCount}">尾页</c:if>
转至<input name="currentPage" type="text" size="1" value="<c:out value='${results.currentPage}'/>" onkeypress="keypress()">页 <input type="submit" name="jumpButton" value="GO" onclick="jumpPage()"/>
<input type="hidden" name="pageCount" value="<c:out value='${results.pageCount}'/>">
<input type="hidden" name="paging">
</td>
</tr>
</table>
</form>
<script language="Javascript">
var form = document.all.pagerForm;
function keypress(){
form.paging.value=1;
if (window.event.keyCode==13){
jumpPage();
}
}
function nextPage(){
form.paging.value=1;
form.currentPage.value = (form.currentPage.value-0) + 1;
form.submit();
}
function prevPage(){
form.paging.value=1;
form.currentPage.value = form.currentPage.value - 1;
form.submit();
}
function firstPage(){
form.paging.value=1;
form.currentPage.value = 1;
form.submit();
}
function lastPage(){
form.paging.value=1;
form.currentPage.value = form.pageCount.value;
form.submit();
}
function jumpPage(){
form.paging.value=1;
var page = form.currentPage.value;
if( page < 1 || isNaN( parseInt(page))) {
form.currentPage.value = 1;
}
if( (page-0) > (form.pageCount.value-0) ) {
form.currentPage.value = form.pageCount.value;
}
}
</script>然后在你的页面中导入就行了数据显示的Action中调用那个方法resultList();
MSSQL top
Oracle rownum
MySQL limit
另外直接操作JDBC也可以实现分页,不过稍微麻烦一点,网上应该也有现成代码.
记住一定要在数据库层分页,否则效率将非常低下.