在框架模式下實現分頁功能(原理)
目標:在Struts2框架中,使用分層架構方式實現分頁功能。
過程:Bean層->Dao層->Services層->Action層->Jsp頁面
具體實現:
1.Bean層
1)首先建立PageBean類(如下所示):
package com.bean;
import java.util.List;
/**
* 分頁類
*/
public class PageBean {
private List<Student> list;//通過資料庫分頁查詢出來的list集合 q.list();
private int allRows; //總記錄數=q.list().size();
private int totalPage;//總頁數=總記錄數/每頁的記錄數
private int showPage;//當前頁
public List<Student> getList() {
return list;
}
public void setList(List<Student> list) {
this.list = list;
}
public int getAllRows() {
return allRows;
}
public void setAllRows(int allRows) {
this.allRows = allRows;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getShowPage() {
return showPage;
}
public void setShowPage(int showPage) {
this.showPage = showPage;
}
}
2)建立Student類(顯示的資料類,通過hibernate匯入。不會的可以先參考文件:XXX)
具體資料略
Student(stuno,sname,sex,phone),通過外來鍵連線的classes類(cno,cname)
2.Dao層
在把資料邏輯層寫好之後,我們就來寫這個PageDao類
導包略
/**
* 與資料庫的互動
*/
public class PageDao {
Session sess = HibernateSessionFactory.getSession()
}
/**
* 查詢學生資料庫中的所有資訊
* @param nowrow
* @param pagesize
* @return 查詢學生資料庫中的所有資訊(分頁)
*/
@SuppressWarnings("unchecked")
public List<Student> selectAll(int nowrow,int pagesize){
Query q = sess.createQuery("from Student").setFirstResult(nowrow).setMaxResults(pagesize);
return q.list();
}
/**
*
* @return 一共有多少記錄(行)
*/
public int selectAllrows(){
Query q = sess.createQuery("from Student");
return q.list().size();
}
}
3.Service層
簡單的寫完Dao層與資料庫的互動之後,就來寫最重要的PageService層
導包略
public class PageSerivce {
/**
* 實現分頁功能
* @param pagesize 每頁的記錄數
* @param page 當前頁
* @return
*/
public PageBean fenye(int pagesize,int page){
PageBean pb = new PageBean();
List<Student> list;
PageDao pd = new PageDao ();
//總記錄數
int allRows = pd.selectAllRows();
//總頁數
int totalPage = (allRows%pagesize == 0)?(allRows/pagesize):(allRows/pagesize)+1;
//當前頁
int nowpage = (page<=0)?1:page;
//當前行
int nowrow = pagesize*(page-1)+1;
list = sd.selectAll(nowrow, pagesize);
pb.setAllRows(allRows);
pb.setList(list);
pb.setShowPage(nowpage);
pb.setTotalPage(totalPage);
return pb;
}
}
4.Action層
寫完最重要的PageService後,我們直接在PageAction呼叫,通過Struts2來發送資料到Jsp層完成呼叫。
導包略
/**
* 業務實現類
*/
public class PageAction {
PageBean pb;
int page; //當前所在頁
/**
* 查詢所有學生資訊
*/
public String selectAll(){
PageSerivce ps = new PageSerivce();
pb = ps.fenye(5, page);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("list",pb);
return "query";
}
5.Jsp頁面
至此,整個分頁所有功能都已經完成,剩下的只需要在Jsp頁面呼叫即可。
首先,在jsp頁面頂部匯入Struts2標籤,
<%@ taglib prefix="s" uri="/struts-tags"%>
然後在body中新增如下程式碼:
<table border = "1" align="center">
<tr>
<td>學號</td>
<td>姓名</td>
<td>性別</td>
<td>電話號碼</td>
<td>班級</td>
</tr>
<s:iterator value="#request.list.list" id= "person">
<tr>
<td><s:property value="#person.stuno"/></td>
<td><s:property value="#person.sname"/></td>
<td><s:property value="#person.sex"/></td>
<td><s:property value="#person.phone"/></td>
<td><s:property value="#person.classes.cname"/></td>
</tr>
</s:iterator>
</table>
<font size="5">共
<font color="red">
<s:property value="#request.list.totalPage"/>
</font>頁</font>
<font size="5">共
<font color="red">
<s:property value="#request.list.allrows"/>
</font>記錄</font>
<br>
<s:if test="#request.list.showPage == 1">
首頁|第一頁
</s:if>
<s:else>
<a href="selectAll_stu">首頁</a>|
<a href="selectAll_stu?page=
<s:property value="#request.list.showPage-1"/>">
上一頁
</a>
</s:else>
<s:if test="#request.list.showPage!= #request.list.totalPage">
<a href="selectAll_stu?page=
<s:property value="#request.list.showPage+1"/>">
下一頁
</a>|
<a href="selectAll_stu?page=
<s:property value="#request.list.totalPage"/>">
尾頁
</a>
</s:if>
<s:else>
下一頁|尾頁
</s:else>
至此,hibernate+struts2實現網頁分頁功能程式碼部分就完畢了,效果圖如下: