標籤:ref import -128 uri stack ber ebe tag int
最近在學習JavaWeb的時候,用到了分頁功能,現在進行一個記錄,以備不時之需
第一步:先完成分頁Bean的編寫。
就是對當前頁數,每頁顯示的記錄數,總記錄數,總頁數,分頁顯示的資訊進行封裝。作為通用的分頁功能的實現,這裡用到了泛型
import java.util.List;/** * 分頁封裝 * */public class PageBean<T> { private int currPage;//當前頁數 private int pageSize;//每頁顯示記錄數 private int totalCount;//總記錄數 private int totalPage;//總頁數 private List<T> list;//每頁顯示的資訊 public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } public List<T> getList() { return list; } public void setList(List<T> list) { this.list = list; }}
第二步:在Action類中編寫一個分頁方法
Action中通過調用業務層Service類的分頁方法,Employee就是具體的資訊Bean,之前泛型的使用就在於此,在不同項目中使用不同的資訊Bean可以完成多種類資訊的分頁,employeeService就是具體的業務層Service,Service中我們也有一個叫findAll的方法。這裡的currPage產生其set/get方法,等使用者點擊了頁面及具體的頁數,Struts2會獲得具體的頁數,然後將currPage傳給Service
// 分頁(當前頁) private int currPage = 1; public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } /** * 分頁查詢 */ public String findAll() { PageBean<Employee> pageBean = employeeService.findAll(currPage); ActionContext.getContext().getValueStack().push(pageBean); return "findAll"; }
第三步:編寫Service中的分頁方法
先產生一個PageBean對象(注意泛型),之後開始封裝這個Bean。pageSize(每頁顯示的記錄數)這裡設定為3,就是每頁顯示3條記錄,totalCount(總記錄數)通過Dao中的findCount()方法來查到,totalPage(總頁數)=totalCount(總記錄數)/pageSize(每頁大小),Math.ceil可以獲得一個double的近似值(大於等於),之後我們通過Double封裝類的intValue再轉成int型,begin(每一頁的開頭的序號),list的資料也通過Dao的findPage(int,int)方法獲得
public PageBean<Employee> findAll(int currPage) { PageBean<Employee> pageBean = new PageBean<>(); // 封裝pageBean pageBean.setCurrPage(currPage); int pageSize = 3; pageBean.setPageSize(pageSize); int totalCount = employeeDao.findCount(); pageBean.setTotalCount(totalCount); Double totalPage = Math.ceil((double) totalCount / pageSize); pageBean.setTotalPage(totalPage.intValue()); int begin = (currPage - 1) * pageSize; List<Employee> list = employeeDao.findPage(begin, pageSize); pageBean.setList(list); return pageBean; }
第四步:編寫Dao中的方法
這之前在Service中使用的findCount()和findPage(int,int),值得注意的就是findCount()中的hql語句使用count(*),還有就是findPage(int,int)中使用了org.hibernate.criterion.DetachedCriteria類,查詢時不是用find方法,而是findByCriteria來查詢
/** * 查詢總記錄數 */ public int findCount() { String hql="select count(*) from Employee"; List<Long> list = (List<Long>) hibernateTemplate.find(hql); if(list.size()>0){ return list.get(0).intValue(); } return 0; } /** * 分頁資訊 */ public List<Employee> findPage(int begin, int pageSize) { DetachedCriteria criteria=DetachedCriteria.forClass(Employee.class); List<Employee> list = (List<Employee>) hibernateTemplate.findByCriteria(criteria, begin, pageSize); return list; }基本上通過以上四步就完成了分頁功能邏輯代碼的編寫,接下來就是對視圖層頁面的編寫
下面是個分頁的簡單顯示,處於首頁時,只顯示下一頁和尾頁,處於尾頁時,只顯示首頁和上一頁,其他頁就都顯示。這裡使用的Struts2的標籤庫,所以要加上
<%@ taglib uri="/struts-tags" prefix="s" %>
為什麼我們可以直接currPage,totalPage等屬性?是因為我們之前將PageBean對象放入了值棧中
<table border="0" cellspacing="0" cellpadding="0" width="900px"><tr><td align="right"> <span>第<s:property value="currPage"/>/<s:property value="totalPage"/>頁</span> <span>總記錄數:<s:property value="totalCount"/>/每頁顯示:<s:property value="pageSize"/>條</span> <span> <s:if test="currPage!=1"> <a href="department_findAll.action?currPage=1">[首頁]</a> <a href="department_findAll.action?currPage=<s:property value="currPage-1"/>">[上一頁]</a> </s:if> <s:if test="currPage!=totalPage"> <a href="department_findAll.action?currPage=<s:property value="currPage+1"/>">[下一頁]</a> <a href="department_findAll.action?currPage=<s:property value="totalPage"/>">[尾頁]</a> </s:if> </span></td></tr></table>
:
可以使用了struts2的<s:iterator>標籤來進行迭代顯示資料,這裡給個參考
<s:iterator value="list" var="d"><tr><td align="center"><s:property value="#d.dname"/></td><td align="center"><a href="">編輯</a></td><td align="center"><a href="">刪除</a></td></tr></s:iterator>
網頁分頁功能的實現