目标:在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实现网页分页功能代码部分就完毕了,效果图如下: