这几天学的关于用SSH实现分页的东西在这里和大家分享一下,技术不足之处,望多多评论

首先我们先写一个分页的类,这个类不用到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);
  });



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值