1. 程式人生 > >在框架模式下實現分頁功能(原理)

在框架模式下實現分頁功能(原理)

目標:在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實現網頁分頁功能程式碼部分就完畢了,效果圖如下: