在框架模式下实现分页功能(原理)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37625860/article/details/70050816

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




猜你喜欢

转载自blog.csdn.net/m0_37625860/article/details/70050816