一种是假分页--->从数据库中把所有的数据给查询出来,放入一个集合对象中,然后在通过一定的算法从集合中去取出需要的数据,并实现分页,这种假分页方式虽然实现了也页面的分页,但是效率不高。
另外一种就是真分页-->从数据库中只查询一部分数据出来显示在页面上,下面我结合SSJ(hibernate)+pager插件实现jsp页面的分页:
第一步、先定义好一个通用的分页模版类,我定义为PageModel:代码如下:
import java.util.List;
/**
* 分页模型
* @author Administrator
*
*/
public class PageModel {
/**
* 总记录数
*/
private int total;
/**
* 但前页面记录集
*/
private List currentPagelistDate;
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public List getCurrentPagelistDate() {
return currentPagelistDate;
}
public void setCurrentPagelistDate(List currentPagelistDate) {
this.currentPagelistDate = currentPagelistDate;
}
}
第二步、 在业务处理类中定义一个方法来处理分页 方法名为paging(int offet,int pagesize)
在类中使用注解方式为EntityManager 注入依赖对象 @PersistenceContext EntityManager em;
public PageModle paging(int offset,int ){
//定义一个Query对象
Query queryTotal=em.createQuery("select o from Object o");
//定义一个整型变量用来保存记录集
int total=queryTotal.getResultList().size();
//定义一个Query对象
Query queryResult=em.createQuery("select o from Object o");
//从数据库中的第几条数据查询起
queryResult.setFirstResult(offset);
//要从数据库中查询出最多的记录
queryResult.setMaxResults(pagesize);
//定义一个List对象用来保存查询出当前页面的集
List currentPageList=queryResult.getResultList();
//实例化对象PageModel
PageModel pm=new PageModel();
pm.setTotal(total);
pm.setCurrentPagelistDate(currentPagelist);
return pm;
}
第三步、在struts2.1 Action中调用业务处理类中的paging(int offset,int currentPageList)代码如下:
public String getPages() throws Exception{
//默认设置从数据库中的第一条数据开始查询,总共要查询3条数据
int offset=0;
int pagesize=3;
if(request.getParameter("pager.offset")!=null)
{
offset=Integer.parseInt(request.getParameter("pager.offset"));
}
PageModel pm=业务处理类.pagings(offset, pagesize);
//把PageModel对象保存在request范围内中
request.setAttribute("pm",pm);
return "success";
}
第四步、需要在jsp中页面进行数据的显示:
1、需要从网上下载一个pager-taglib.jar,导入项目中
2、在jsp页面中把设置一个标签指令:<%@ taglib uri="http://jsptags.com/tags/navigation/pager" prefix="pg"%>
3、下面需要写以下代码:
<!-- 分页 -->
<pg:pager url="action名称!action方法.action" items="${pm.total}" export="currentPageNumber=pageNumber" maxPageItems="3">
<pg:first>
<a href="${pageUrl}">首页</a>
</pg:first>
<pg:prev>
<a href="${pageUrl}">上一页</a>
</pg:prev>
<pg:pages>
<c:choose>
<c:when test="${currentPageNumber eq pageNumber}">
<font color="red">${pageNumber }</font>
</c:when>
<c:otherwise>
<a href="${pageUrl }">${pageNumber }</a>
</c:otherwise>
</c:choose>
</pg:pages>
<pg:next>
<a href="${pageUrl }">下一页</a>
</pg:next>
<pg:last>
<a href="${pageUrl }">尾页</a>
</pg:last>
</pg:pager>
效果如下: