三步:
1,写分页类
2,ACTION里调分页类
3,页面显示分页
---------------------------------------1,写分页类
/**
* findPageResult
* @此方法描述的是:Hibernate分页
* @param request
* @param HQL
* @param num 页面要要显示的页数
* @param maxResults 每页要显示多少行
* @param currentResult 首页的显示的末记录
* @return
* List
*/
protected List findPageResult(HttpServletRequest request,String HQL, int num, int maxResults, int currentResult){
this.log.debug("BasicAction--->findPageResult--->start:");
String pageFlag = request.getParameter("pageFlag"); //标志位,(下一页,上一页,最后一页,首页,跳转)
int rows; //总行数
int pages; //总页数
//int maxResults = 5; //每页显示的行数
int currentPage = 1; //当前页数
int startPage = 1; //要显示的起始页
int endPage = 1; //要显示的最后一页
int firstResult = 0; //当前页首记录index
//int currentResult = 5; //当前页末记录index
String currentPageTemp = request.getParameter("currentPages"); //获得当前页
if(!this.trimnull(currentPageTemp).equals("")){
currentPage = new Integer(currentPageTemp).intValue();
}
String firstResultTemp = request.getParameter("firstResults"); //获得当前页的首记录
if(!this.trimnull(firstResultTemp).equals("")){
firstResult = new Integer(firstResultTemp).intValue();
}
//初始化sessionFactory
SessionFactory sessionFactory = (SessionFactory) BeanHelp.getBean("sessionFactory");
Session session = sessionFactory.openSession();
String rowsTemp = request.getParameter("rows"); //获得总行数
if(!this.trimnull(rowsTemp).equals("") && !"0".equals(rowsTemp)){//如果总行数不为零或不为空的时候转化为整数,否则为第一次计算
rows = new Integer(rowsTemp).intValue();
}else{ //第一次计算
String HQL_rows = "select count(*) " + HQL.substring(HQL.indexOf("from"));
this.log.debug("HQL_rows="+HQL_rows);
rows = ((Integer)(session.createQuery(HQL_rows).list().get(0))).intValue();//第一次计算得到总行数
}
this.log.debug("rows="+rows);
String pagesTemp = request.getParameter("pages");
if(!this.trimnull(pagesTemp).equals("") && !"0".equals(pagesTemp)){//如果总页数不为零或不为空的时候转化为整数,否则为第一次计算
pages = new Integer(pagesTemp).intValue();
}else if(rows == 0){
pages = 0; //总页数
maxResults = 0; //每页显示的行数
currentPage = 0; //当前页
firstResult = 0; //当前页的首记录
currentResult = 0; //当前页的末记录
}else{
pages = rows/maxResults; //总行数除以每页显示的最大结果数表示为总页数
firstResult = 1;
if(pages < 1) {
currentResult = rows;//如果当前的结果大于1时,看是否有余数,如果有总页数加1
}
if(rows%maxResults>0){
pages++;
}
}
if(pages<num&&pages>=1) { //如果总页数小于9时
endPage = pages; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = 1; //起始页为1
pages = pages; //总页数
}else if(pages>9){ //如果总页数大于9
if(currentPage-num/2<1) { //如果当前页-8<1
endPage = num; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = 1; //起始页为1
pages = pages; //总页数
}else if (currentPage+num/2>pages){ //如果当前页+4<page
endPage = pages; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = pages-num-1; //起始页为1
pages = pages; //总页数
}else{
endPage = currentPage+num/2; //这个页最后显示的页数为 pages
currentPage = currentPage; //当前页为1
startPage = currentPage-num/2; //起始页为1
pages = pages;
}
}else{
pages = pages; //这个页的最后显示的页数为 pages
endPage = 0; //这个页最后显示的页数为 pages
currentPage = 0; //当前页为1
startPage = 1;
}
if(pageFlag==null){
//
}else if(pageFlag.equals("first")){ //首页
currentPage = 1; //当前页为1
firstResult = 1; //首记录为1
if(rows/maxResults >1) { //总行数/每页显示的最大结果数大于1
currentResult = maxResults; //当前页的麽记录=每页显示的最大结果数
} else { //总行数/每页显示的最大结果数小于1
currentResult = rows%maxResults; //当前页的麽记录=总行数/每页要显示最大结果的余数
}
}else if(pageFlag.equals("last")){ //末页
firstResult = (pages-1)*maxResults; //当前页的首记录=总页数减一乘以每页要显示的最大结果数
currentPage = pages; //当前页就等于总页数
currentResult = rows; //当前页的麽记录=总行数
}else if(pageFlag.equals("next")){ //下一页
currentPage = currentPage + 1; //当前页加以
firstResult = firstResult+maxResults; //当前页的首记录 = 上一页的首记录+每页显示的最大结果
if(pages > currentPage) { //如果总页数大于当前页
currentResult = firstResult + maxResults - 1; //当前页的麽记录 = 当前页的首记录+每页显示的最大结果
} else { //负责
if(rows%maxResults==0) {
currentResult = rows; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}else if(pageFlag.equals("before")){ //上一页
currentResult = firstResult-1; //当前页的麽记录 = 上一页的首记录
firstResult = firstResult - maxResults; //当前页的首记录 = 上一页的首记录 - 每页显示的最大结果数
currentPage--;
}else if(pageFlag.equals("changePage")){ //跳页
firstResult = (currentPage-1)*maxResults+1; //当前页的首记录 = (当前页-1)*每要显示的最大结果数
if(pages > currentPage) { //如果总页数大于当前页
currentResult = firstResult + maxResults-1; //当前页的麽记录 = 当前页的首记录 + 每页显示的最大结果数
} else {
//currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
if(rows%maxResults==0) {
currentResult = firstResult+maxResults-1; //当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}else{
currentResult = firstResult + rows%maxResults-1;//当前页的麽记录 = 当前页的首记录 + 总行数/每页要显示最大结果的余数
}
}
}
List list = session.createQuery(HQL).setFirstResult(firstResult-1).setMaxResults(maxResults).list();
session.close();
request.setAttribute("rows",rows); //总行数
request.setAttribute("pages",pages); //总页数
request.setAttribute("currentPages",currentPage); //当前页
request.setAttribute("maxResults",maxResults); //当前显示的行数
request.setAttribute("firstResults",firstResult); //当前页的首记录
request.setAttribute("currentResults",currentResult);//当前页的末记录
request.setAttribute("endPages",endPage); //当前页显示的最后页数
request.setAttribute("startPages",startPage); //当前页显示的起始页数
System.out.println("rows==========="+rows);
System.out.println("pages==========="+pages);
System.out.println("maxResults==========="+maxResults);
System.out.println("firstResult==========="+firstResult);
System.out.println("currentResult==========="+currentResult);
System.out.println("startPage==========="+startPage);
System.out.println("currentPages==========="+currentPage);
System.out.println("endPages==========="+endPage);
return list;
}
public String trimnull(String src){
if(src==null||src.equalsIgnoreCase("null")){
return "";
}
return src.trim();
}
-----------------------------------------action页面调用分页
String sql="from product "
List marketList = this.findPageResult(request,sql,10,10,10);
request.setAttribute("marketInfos", marketList);
return mapping.findForward("verifyMain");
------------------------------------------页面显示
<script>
function pagesClick(indexes) {//取页数:123456
var rows = document.getElementById("rows").value;
var pages = document.getElementById("pages").value;
var firstResults = document.getElementById("firstResults").value;
document.peform.action="/admin/verify.do?method=queryList¤tPages="+indexes+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=changePage";
document.peform.submit();
}
</script>
<div class="page">
<form action="verify.do?method=selectType" name="peform"
method="post">
<div style="text-align:right">
共 ${pages} 页 ${rows } 条 本页显示 ${firstResults}-${currentResults}条
<br />
<span>
<a href="javascript:upPage()">上一页</a>
<c:forEach begin="${startPages}" end="${endPages}" step="1" var="indexes">
<span id="sp${indexes}">
<a href="javascript:pagesClick(${indexes})">
<c:if test="${currentPages==indexes}"><font color="red"></c:if>
<c:if test="${currentPages!=indexes}"><font color="black"></c:if>
${indexes}</font>
</a>
</span>
</c:forEach>
<a href="javascript:nextPage()">下一页</a> 到第 <input name="jumppages" id="jumppages" type="text" value="${currentPages}" size="1" /> 页 <input type="button"
value="确认" onclick="jumpPage()" /> </span>
</div>
<div class="clear"></div>
<input type="hidden" id="rows" name="rows" value="${rows}" />
<!-- 总记录数 -->
<input type="hidden" id="pages" name="pages" value="${pages}" />
<!-- 总页数 -->
<input type="hidden" id="currentPages" name="currentPages"
value="${currentPages}" />
<!-- 当前页 -->
<input type="hidden" id="maxResults" name="maxResults"
value="${maxResults}" />
<!-- 每页显示的记录数 -->
<input type="hidden" id="firstResults" name="firstResults"
value="${firstResults}" />
<!-- 当前页的第一条记录 -->
<input type="hidden" id="currentResults" name="currentResults"
value="${currentResults}" />
<!-- 当前页的最后一条记录 -->
<input type="hidden" id="endPages" name="endPages"
value="${endPages}" />
<!-- 要显示的最后一页 -->
<input type="hidden" id="startPages" name="startPages"
value="${startPages}" />
<!-- 要显示的起始页 -->
<script type="text/javascript">
//--------------------------------- 上一页
function upPage(){
var rows = document.getElementById("rows").value;
var pages = document.getElementById("pages").value;
var currentPages = document.getElementById("currentPages").value;
var maxResults = document.getElementById("maxResults").value;
var firstResults = document.getElementById("firstResults").value;
var currentResults = document.getElementById("currentResults").value;
var endPages = document.getElementById("endPages").value;
var startPages = document.getElementById("startPages").value;
if(currentPages==1) {
alert("已经是第一页");
return;
}else{
document.peform.action="/admin/verify.do?method=queryList¤tPages="+currentPages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=before";
document.peform.submit();
}
}
//--------------------------------- 下一页
function nextPage(){
var rows = document.getElementById("rows").value;
var pages = document.getElementById("pages").value;
var currentPages = document.getElementById("currentPages").value;
var maxResults = document.getElementById("maxResults").value;
var firstResults = document.getElementById("firstResults").value;
var currentResults = document.getElementById("currentResults").value;
var endPages = document.getElementById("endPages").value;
var startPages = document.getElementById("startPages").value;
if(currentPages==pages) {
alert("已经是最后一页");
return;
}else{
document.peform.action="/admin/verify.do?method=queryList¤tPages="+currentPages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=next";
document.peform.submit();
}
}
//--------------------------------- 跳页
function jumpPage(){
var rows = document.getElementById("rows").value;
var pages = document.getElementById("pages").value;
var currentPages = document.getElementById("currentPages").value;
var maxResults = document.getElementById("maxResults").value;
var firstResults = document.getElementById("firstResults").value;
var currentResults = document.getElementById("currentResults").value;
var endPages = document.getElementById("endPages").value;
var startPages = document.getElementById("startPages").value;
var jumppages = document.getElementById("jumppages").value;
if(jumppages==currentPages) {
alert("这是当前页");
return false;
}else if(jumppages<1) {
alert("超过页数的范围");
return false;
}else if(parseInt(jumppages)>parseInt(pages)) {
alert("超过页数的范围");
return false;
}else{
document.peform.action="/admin/verify.do?method=queryList¤tPages="+jumppages+"&rows="+rows+"&pages="+pages+"&firstResults="+firstResults+"&pageFlag=changePage";
document.peform.submit();
}
}
</script>
</div>