import java.util.List;
/**
* 分頁功能中的一頁的信息
*
* @author tyg
*
*/
public class PageBean {
// 指定的或是頁面參數
private int currentPage; // 當前頁
private int pageSize; // 每頁顯示多少條
// 查詢數據庫
private int recordCount; // 總記錄數
private List recordList; // 本頁的數據列表
// 計算
private int pageCount; // 總頁數
private int beginPageIndex; // 頁碼列表的開始索引(包含)
private int endPageIndex; // 頁碼列表的結束索引(包含)
/**
* 只接受前4個必要的屬性,會自動的計算出其他3個屬生的值
*
* @param currentPage
* @param pageSize
* @param recordCount
* @param recordList
*/
public PageBean(int currentPage, int pageSize, int recordCount, List recordList) {
this.currentPage = currentPage;
this.pageSize = pageSize;
this.recordCount = recordCount;
this.recordList = recordList;
// 計算總頁碼
pageCount = (recordCount + pageSize - 1) / pageSize;
// 計算 beginPageIndex 和 endPageIndex
// >> 總頁數不多於10頁,則全部顯示
if (pageCount <= 10) {
beginPageIndex = 1;
endPageIndex = pageCount;
}
// >> 總頁數多於10頁,則顯示當前頁附近的共10個頁碼
else {
// 當前頁附近的共10個頁碼(前4個 + 當前頁 + 後5個)
beginPageIndex = currentPage - 4;
endPageIndex = currentPage + 5;
// 當前面的頁碼不足4個時,則顯示前10個頁碼
if (beginPageIndex < 1) {
beginPageIndex = 1;
endPageIndex = 10;
}
// 當後面的頁碼不足5個時,則顯示後10個頁碼
if (endPageIndex > pageCount) {
endPageIndex = pageCount;
beginPageIndex = pageCount - 10 + 1;
}
}
}
public List getRecordList() {
return recordList;
}
public void setRecordList(List recordList) {
this.recordList = recordList;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getRecordCount() {
return recordCount;
}
public void setRecordCount(int recordCount) {
this.recordCount = recordCount;
}
public int getBeginPageIndex() {
return beginPageIndex;
}
public void setBeginPageIndex(int beginPageIndex) {
this.beginPageIndex = beginPageIndex;
}
public int getEndPageIndex() {
return endPageIndex;
}
public void setEndPageIndex(int endPageIndex) {
this.endPageIndex = endPageIndex;
}
}
使用案例
1、action調用
// 準備分頁信息, 最終版
new QueryHelper(Reply.class, "r")//
.addCondition("r.topic=?", topic)//
.addOrderProperty("r.postTime", true)//
.preparePageBean(replyService, pageNum, pageSize);
2、service調用
// 公共的查詢分頁信息的方法(最終版)
public PageBean getPageBean(int pageNum, int pageSize, QueryHelper queryHelper) {
System.out.println("-------> DaoSupportImpl.getPageBean( int pageNum, int pageSize, QueryHelper queryHelper )");
// 參數列表
List<Object> parameters = queryHelper.getParameters();
// 查詢本頁的數據列表
Query listQuery = getSession().createQuery(queryHelper.getListQueryHql()); // 創建查詢對象
if (parameters != null) { // 設置參數
for (int i = 0; i < parameters.size(); i++) {
listQuery.setParameter(i, parameters.get(i));
}
}
listQuery.setFirstResult((pageNum - 1) * pageSize);
listQuery.setMaxResults(pageSize);
List list = listQuery.list(); // 執行查詢
// 查詢總記錄數量
Query countQuery = getSession().createQuery(queryHelper.getCountQueryHql());
if (parameters != null) { // 設置參數
for (int i = 0; i < parameters.size(); i++) {
countQuery.setParameter(i, parameters.get(i));
}
}
Long count = (Long) countQuery.uniqueResult(); // 執行查詢
return new PageBean(pageNum, pageSize, count.intValue(), list);
}
3、jsp調用 jspf文件
<!--分頁信息-->
<%@ include file="/WEB-INF/jsp/util/pageView.jspf" %>
<s:form action="topic_show?id=%{id}"></s:form>
頁面模板
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<div id=PageSelectorBar>
<div id=PageSelectorMemo>
頁次:${currentPage}/${pageCount }頁
每頁顯示:${pageSize }條
總記錄數:${recordCount }條
</div>
<div id=PageSelectorSelectorArea>
<a href="javascript: gotoPage(1)" title="首頁" style="cursor: hand;">
<img src="${pageContext.request.contextPath}/style/blue/images/pageSelector/firstPage.png"/>
</a>
<s:iterator begin="%{beginPageIndex}" end="%{endPageIndex}" var="num">
<s:if test="#num == currentPage"> <%-- 當前頁 --%>
<span class="PageSelectorNum PageSelectorSelected">${num}</span>
</s:if>
<s:else> <%-- 非當前頁 --%>
<span class="PageSelectorNum" style="cursor: hand;" onClick="gotoPage(${num});">${num}</span>
</s:else>
</s:iterator>
<a href="javascript: gotoPage(${pageCount})" title="尾頁" style="cursor: hand;">
<img src="${pageContext.request.contextPath}/style/blue/images/pageSelector/lastPage.png"/>
</a>
轉到:
<select οnchange="gotoPage(this.value)" id="_pn">
<s:iterator begin="1" end="%{pageCount}" var="num">
<option value="${num}">${num}</option>
</s:iterator>
</select>
<script type="text/javascript">
$("#_pn").val("${currentPage}");
</script>
</div>
</div>
<script type="text/javascript">
function gotoPage( pageNum ){
// window.location.href = "forum_show.action?id=${id}&pageNum=" + pageNum;
$(document.forms[0]).append("<input type='hidden' name='pageNum' value='" + pageNum +"'>");
document.forms[0].submit();
}
</script>