首先我们先写一个分页的类,这个类不用到Hibernate的配置文件中去,
public class PageBean {
private int currentPage=1; // 当前页
private int previousPage=0; // 上一页
private int nextPage=2; // 下一页
private int firstPage=1; // 首页
private int lastPage; // 末页
private int perPage =5; // 每页记录数
private int allRecords; // 总记录数
private int allPage; // 总页数
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public int getPreviousPage() {
return previousPage;
}
public void setPreviousPage(int previousPage) {
this.previousPage = previousPage;
}
public int getNextPage() {
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public int getFirstPage() {
return firstPage;
}
public void setFirstPage(int firstPage) {
this.firstPage = firstPage;
}
public int getLastPage() {
return lastPage;
}
public void setLastPage(int lastPage) {
this.lastPage = lastPage;
}
public int getPerPage() {
return perPage;
}
public void setPerPage(int perPage) {
this.perPage = perPage;
}
public int getAllRecords() {
return allRecords;
}
public void setAllRecords(int allRecords) {
this.allRecords = allRecords;
}
public int getAllPage() {
return allPage;
}
public void setAllPage(int allPage) {
this.allPage = allPage;
}
/**
* 根据当前页和总记录数初始化PageBean的各个参数
* @param pageBean 初始化之前的PageBean
* @param totalSize 总记录数
* @return 初始化之后的PageBean
*/
public PageBean init(PageBean pageBean,int totalSize) {
pageBean.setAllRecords(totalSize); // 设置总记录条数;
pageBean.setAllPage(totalSize % pageBean.getPerPage() == 0 ? totalSize/pageBean.getPerPage():totalSize/pageBean.getPerPage()+ 1);
// 设置总页数
pageBean.setFirstPage(1);// 设置首页数;
pageBean.setLastPage(pageBean.getAllPage());// 设置末页数;
if (pageBean.getCurrentPage() == 1)
pageBean.setPreviousPage(1);// 设置上一页数;
else
pageBean.setPreviousPage(pageBean.getCurrentPage() - 1);
if (pageBean.getCurrentPage() == pageBean.getAllPage())
pageBean.setNextPage(pageBean.getAllPage());// 设置下一页数;
else
pageBean.setNextPage(pageBean.getCurrentPage() + 1);
return pageBean;
}
}
这个初始化的方法一定要有,因为在做下一页等操作的时候十分重要。
我们要在action中去实例化这个类的对象并生成他的get方法,方便在页面用ognl表达式获取他的属性
private PageBean pageBean = new PageBean();
public PageBean getPageBean() {
return pageBean;
}
此外还要有个定义一个page、和url的字段(为了做上一页下一页等操作),并生成他们的get、set方法
private int page=1;
private String url;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
然后在执行操作的时候把pgaeBean传到service层
url="queryOper_materAll";
pageBean.setCurrentPage(page);//指定当前页
listOper=operService.materAll(pageBean,oper);
此处的url是留给在页面操作
接下来要在service层初始化pageBean
//获取总记录数
int totalSize=operDao.allOper(oper).size();
//根据当前页和总记录数初始化PageBean
pageBean = pageBean.init(pageBean, totalSize);
//获取当前页数据
int maxResults =pageBean.getPerPage();
int firstResult=(pageBean.getCurrentPage()-1)*maxResults;
list=operDao.search(oper,firstResult,maxResults);
然后在Dao层调用findByCriteria(criteria, firstResult, maxResults)方法查询当前页的信息(关于findByCriteria的使用下面给大家一个链接https://my.oschina.net/u/2266102/blog/425601)
最后就是编辑页面了
<td bgcolor="#00ffff" colspan="10" align="center">
第<s:property value="pageBean.currentPage" />页
每页<select id="pageSize" οnchange="setPageSize(this.value)">
<s:iterator begin="5" end="50" step="5" var="num">
<option value="${num}">${num}</option>
</s:iterator>
</select>条记录
共<s:property value="pageBean.allPage" />页
共<s:property value="pageBean.allRecords" /> 条<a
href="<s:property value='url'/>.action?page=<s:property value='pageBean.firstPage'/>&operator=<s:property value='operator'/>&operName=<s:property value='operName'/>&operKind=<s:property value='operKind'/>&operTime1=<s:property value='operTime1'/>&operTime2=<s:property value='operTime2'/>">首页</a>
<a
href="<s:property value='url'/>.action?page=<s:property value='pageBean.previousPage'/>&operator=<s:property value='operator'/>&operName=<s:property value='operName'/>&operKind=<s:property value='operKind'/>&operTime1=<s:property value='operTime1'/>&operTime2=<s:property value='operTime2'/>">上一页</a>
<a
href="<s:property value='url'/>.action?page=<s:property value='pageBean.nextPage'/>&operator=<s:property value='operator'/>&operName=<s:property value='operName'/>&operKind=<s:property value='operKind'/>&operTime1=<s:property value='operTime1'/>&operTime2=<s:property value='operTime2'/>">下一页</a>
<a
href="<s:property value='url'/>.action?page=<s:property value='pageBean.lastPage'/>&operator=<s:property value='operator'/>&operName=<s:property value='operName'/>&operKind=<s:property value='operKind'/>&operTime1=<s:property value='operTime1'/>&operTime2=<s:property value='operTime2'/>">尾页</a>
转到第<select id="pageCurrent" οnchange="gotoPage(this.value)">
<s:iterator begin="1" end="pageBean.allPage" var="num">
<option value="${num}">${num}</option>
</s:iterator>
</select>页
</td>
url就是action中传过来的参数,其他的参数根基自己需要填写
最后是一个选择每页显示信息条数以跳转页的方法
每页<select id="pageSize" οnchange="setPageSize(this.value)">
<s:iterator begin="5" end="50" step="5" var="num">
<option value="${num}">${num}</option>
</s:iterator>
</select>条记录
function setPageSize(pageSize) {
var url = "<s:property value='url'/>";
var operator = "<s:property value='operator'/>";
var operName = "<s:property value='operName'/>";
var operKind = "<s:property value='operKind'/>";
var operTime1 = "<s:property value='operTime1'/>";
var operTime2 = "<s:property value='operTime2'/>";
var pageNum =1;
window.location.href = url + ".action?page=" + pageNum
+ "&operator=" + operator + "&operName=" + operName
+ "&operKind=" + operKind + "&operTime1=" + operTime1
+ "&operTime2=" + operTime2 + "&pageBean.perPage="
+ pageSize;
}
转到第<select id="pageCurrent" οnchange="gotoPage(this.value)">
<s:iterator begin="1" end="pageBean.allPage" var="num">
<option value="${num}">${num}</option>
</s:iterator>
</select>页
function setPageSize(pageSize) {
var url = "<s:property value='url'/>";
var operator = "<s:property value='operator'/>";
var operName = "<s:property value='operName'/>";
var operKind = "<s:property value='operKind'/>";
var operTime1 = "<s:property value='operTime1'/>";
var operTime2 = "<s:property value='operTime2'/>";
var pageNum =1;
window.location.href = url + ".action?page=" + pageNum
+ "&operator=" + operator + "&operName=" + operName
+ "&operKind=" + operKind + "&operTime1=" + operTime1
+ "&operTime2=" + operTime2 + "&pageBean.perPage="
+ pageSize;
}
此初始化的方法是为了在选择页码的时候保持pagesize的大小
$(document).ready(function() {
var pageSize = "<s:property value='pageBean.perPage'/>";
var pageCurrent = "<s:property value='pageBean.currentPage'/>";
$("#pageSize").val(pageSize);
$("#pageCurrent").val(pageCurrent);
});