今天看到某人写的分页类,结果发现批人家的人不少,没有必要,好的东西吸收学习,感觉不实用可以不用,何必发帖子挖苦人家。我前段时间也自己设计了一个分页的方法,绝对是自己想到的,如果网上有一样的,说明大家都思考了,有可取度,提供给大家参考。 
首先写了一个分页的类,其实只有主要属性的setter和getter方法 
/** 
* 分页类 
* @author qinglin876 
* 
*/ 
public class Pagination { 
private int start; 
//一次取得的数量 
private int size; 
//要取得页数 
private int currentPage = 1; 
//总的记录页数 
private int totalPage = 0; 
//总的记录条数 
private int totalRecord; 
public int getTotalRecord() { 
return totalRecord; 
} 
public void setTotalRecord(int totalRecord) { 
this.totalRecord = totalRecord; 
} 
public Pagination(){ 
} 
public Pagination(int size){ 
this.size = size; 
} 
public int getSize() { 
return size; 
} 
public void setSize(int size) { 
this.size = size; 
} 
public int getStart() { 
return start; 
} 
public void setStart(int start) { 
this.start = start; 
} 
public int getCurrentPage() { 
return currentPage; 
} 
public void setCurrentPage(int currentPage) { 
this.currentPage = currentPage; 
} 
public int getTotalPage() { 
return totalPage; 
} 
public void setTotalPage(int totalPage) { 
this.totalPage = totalPage; 
} 
} 
另外pagination.jsp由pagination类填充 
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<%@ taglib prefix="s" uri="/struts-tags"%> 
<SCRIPT type="text/javascript"> 
      function trim(str){ 
return str.replace(/(^\s*)|(\s*$)/g, ""); 
} 
function selectPage(input){ 
var value = trim(input.value); 
if(value == ""){ 
return; 
} 
if(/\d+/.test(value)){ 
input.form.submit(); 
return; 
} 
alert("请输入正确的页数"); 
input.focus(); 
} 
    
</SCRIPT> 
<div class="pagech"> 
<s:if test="pagination.totalPage != 0"> 
<s:url action="%{#request.url}" id="first"> 
<s:param name="pagination.currentPage" value="1"></s:param> 
</s:url> 
<s:url action="%{#request.url}" id="next"  > 
<s:param name="pagination.currentPage" 
value="pagination.currentPage+1"> 
</s:param> 
</s:url> 
<s:url action="%{#request.url}" id="prior" > 
<s:param name="pagination.currentPage" 
value="pagination.currentPage-1"></s:param> 
</s:url> 
<s:url action="%{#request.url}" id="last"> 
<s:param name="pagination.currentPage" value="pagination.totalPage"></s:param> 
</s:url> 
<s:if test="pagination.currentPage == 1"> 
<span class="current">首页</span> 
<span class="current">上一页</span> 
</s:if> 
<s:else> 
<s:a href="%{first}">首页</s:a> 
<s:a href="%{prior}">上一页</s:a> 
</s:else> 
<s:if 
test="pagination.currentPage == pagination.totalPage || pagination.totalPage == 0"> 
<span class="current">下一页</span> 
<span class="current">末页</span> 
</s:if> 
<s:else> 
<s:a href="%{next}">下一页</s:a>   
                  <s:a href="%{last}">末页</s:a> 
</s:else> 
<span class="jumplabel">跳转到</span> 
<s:form action="%{#request.url}" theme="simple" 
cssStyle="display:inline"> 
<s:hidden name="pagination.totalPage" value="%{pagination.totalPage}"></s:hidden> 
<input type="text" name="pagination.currentPage" size="2" 
onblur="selectPage(this)" /> 
</s:form> 
<span class="jumplabel">页</span> 
<span class="jumplabel">共<s:property 
value="pagination.totalRecord" />条</span> 
<span class="jumplabel">当前是第<s:property 
value="pagination.currentPage" />/<s:property value="pagination.totalPage"/>页</span> 
</s:if> 
</div> 
用的时候,在页面include进去,注意上面的"%{#request.url}",即是在struts2的action里面有一个setter和getter方法,下面看action中的某个方法 
public String showNotices() throws Exception{ 
if(tip != null){ 
tip = new String(tip.getBytes("iso8859-1"),"utf-8"); 
} 
if(notices == null) 
this.notices = new ArrayList<Notice>(); 
int size = Integer.valueOf(this.getText("per_page_notice_size")); 
if (pagination == null) { 
pagination = new Pagination(size); 
} 
pagination.setSize(size); 
if (pagination.getCurrentPage() <= 0) { 
pagination.setCurrentPage(1); 
} 
if (pagination.getTotalPage() != 0 
&& pagination.getCurrentPage() > pagination.getTotalPage()) { 
pagination.setCurrentPage(pagination.getTotalPage()); 
} 
url = "goto_showNotices.action"; this.notices.addAll(this.noticeDAO.showAll(pagination)); 
if(this.notices.size() == 0 && pagination.getCurrentPage() != 1){ 
pagination.setCurrentPage(pagination.getCurrentPage()-1); 
this.notices.addAll(this.noticeDAO.showAll(pagination)); 
} 
return "success"; 
} 
在上面的this.noticeDAO.showAll(pagination))中填充pagination,具体如下 
/* 
* 显示所有的通告 
* @see com.qinglin.dao.NoticeDAO#showAll(com.qinglin.util.Pagination) 
*/ 
@SuppressWarnings("unchecked") 
public List<Notice> showAll(final Pagination pagination) { 
String hql = "from Notice as n"; 
this.getHibernateTemplate().setCacheQueries(true); 
int totalRecord = ((Long) this.getSession().createQuery( 
"select count(*) " + hql).uniqueResult()).intValue(); 
int totalPage = totalRecord % pagination.getSize() == 0 ? totalRecord 
/ pagination.getSize() : totalRecord / pagination.getSize() + 1; 
pagination.setTotalRecord(totalRecord); 
pagination.setTotalPage(totalPage); 
hql += " order by n.add_date desc"; 
final String hql1 = hql; 
return (List<Notice>) this.getHibernateTemplate().execute( 
new HibernateCallback() { 
public Object doInHibernate(Session session) 
throws HibernateException, SQLException { 
Query query = session.createQuery(hql1); 
query.setFirstResult((pagination.getCurrentPage() - 1) 
* pagination.getSize()); 
query.setMaxResults(pagination.getSize()); 
return query.list(); 
} 
}); 
} 
基本上就这些,当然请求的action里面需要设置pagination的setter和getter方法 
这个分页方法特点是简单,只需在action中指明请求的url,用某种方法填充pagination,在显示的页面包含pagination.jsp即可。 
package com.shop.bean; 
import java.util.List; 
public class PageView <T> { 
private int currentPage = 1; 
private long totalPage = 1; 
private long totalRecord = 1; 
private List <T> records; 
private int firstIndex = 1; 
private PageIndex pageIndex; 
private int maxResult = 12; 
public PageView(int currentPage, int maxResult) { 
this.currentPage = currentPage; 
this.maxResult = maxResult; 
this.firstIndex = currentPage * maxResult; 
} 
public int getCurrentPage() { 
return currentPage; 
} 
public void setCurrentPage(int currentPage) { 
this.currentPage = currentPage; 
} 
public void setQueryResult(QueryResult <T> qr){ 
setTotalRecord(qr.getTotal()); 
setRecords(qr.getDatas()); 
} 
public long getTotalPage() { 
return totalPage; 
} 
public void setTotalPage(long totalPage) { 
this.totalPage = totalPage; 
this.pageIndex = WebTool.getPageIndex(this.maxResult, this.currentPage, this.totalPage); 
} 
public long getTotalRecord() { 
return totalRecord; 
} 
public void setTotalRecord(long totalRecord) { 
this.totalRecord = totalRecord; 
setTotalPage(totalRecord / this.maxResult == 0 ? totalRecord / this.maxResult : totalRecord / this.maxResult + 1); 
} 
public List <T> getRecords() { 
return records; 
} 
public void setRecords(List <T> records) { 
this.records = records; 
} 
public int getFirstIndex() { 
return firstIndex; 
} 
public PageIndex getPageIndex() { 
return pageIndex; 
} 
public void setPageIndex(PageIndex pageIndex) { 
this.pageIndex = pageIndex; 
} 
public int getMaxResult() { 
return maxResult; 
} 
public void setMaxResult(int maxResult) { 
this.maxResult = maxResult; 
} 
public void setFirstIndex(int firstIndex) { 
this.firstIndex = firstIndex; 
} 
} 
画面的代码: 
<s:iterator value="#request.pageView.pageIndex.pageList"> 
      <s:if test="#request.pageView.currentPage == 4"> <b> <font color="#FFFFFF">第 <s:property/>页 </font> </b> </s:if> 
    <s:if test="#request.pageView.currentPage != 4"> <a href="javascript:topage( <s:property/>)" class="a03">第 <s:property/>页 </a> </s:if> 
</s:iterator> 
action中的代码: 
Map <String, Object> request = (Map <String, Object>)ActionContext.getContext().get("request"); 
request.put("pageView", pageView); 
<s:iterator value="#request.pageView.pageIndex.pageList">中="#request.pageView.pageIndex.pageList值能正常获取,可是  <s:if test="#request.pageView.currentPage == 4"> 中的="#request.pageView.currentPage值获取不到正确的值,这是什么原因啊? 
问题补充:
  <s:iterator value="#request.pageView.pageIndex.pageList"> 
    <s:if test="{#request.pageView.currentPage == 4}"><b><font color="#FFFFFF">第<s:property/>页</font></b></s:if> 
    <s:if test="{#request.pageView.currentPage != 4}"><a href="javascript:topage(<s:property/>)" class="a03">第<s:property/>页</a></s:if> 
</s:iterator>