关闭

ssh项目中页面分页展现的处理

标签: 分页ssh
1485人阅读 评论(0) 收藏 举报
分类:

这几天一直在研究分页问题。看了别人的例子,自己总算是明白了,以前自己不知道去想怎么实现的,只想着去掉用,现在发现,只要用心,什么都能解决。一下是自己大概的总结,算是学习笔记吧,继续努力。

   1.创建PageModel对象,即用来实现分页的javabean组件,代码如下:


import java.util.List;

public class PageModel {
		private int total;//总记录数
		private int pageSize;//每页记录数
		private int currentPage;//当前页数
		private List<?> datas;//结果集
		private int totalPage;//总的页数
       
        
		public int getPageSize() {
			return pageSize;
		}
		public void setPageSize(int pageSize) {
			this.pageSize = pageSize;
		}
		public int getCurrentPage() {
			return currentPage;
		}
		public void setCurrentPage(int currentPage) {
			this.currentPage = currentPage;
		}
		public int getTotal(){
			return total;
		}
		public void setTotal(int total){
			this.total = total;
		}
		public List<?> getDatas(){
			return datas;
		}
		public void setDatas(List<?> datas){
			this.datas = datas;
		}
		public int getTotalPage() {
			return totalPage;
		}
		public void setTotalPage(int totalPage) {
			this.totalPage = totalPage;
		}
		

		// 获取第一页
		public int getFirstPage() {
			return 1;
		}

		// 获取最后下一页
		public int getLastPage() {
			return (total + pageSize - 1) / pageSize;
		}

		// 获取下一页
		public int getNextPage() {
			return (currentPage >= getLastPage() ? getLastPage() : currentPage + 1);
		}

		// 获取上一页
		public int getPreviousPage() {

			return currentPage <= 1 ? currentPage : (currentPage - 1);
		}

		public String toString() {
			return "PageModel:[currentPage:" + getCurrentPage() + ",pageSize"
					+ getPageSize() + ",listSize" + getDatas().size() + "]";
		}
		
		//获取开始的页数,在用到foreach的时候用到1,2,3,4,5
		public int getStart(){
			    if(getCurrentPage()<this.getTotalPage()) return 1;
			return this.getCurrentPage()>this.getPageSize()?(this.getCurrentPage()-this.getPageSize()+1):1 ;
		}
		
		public int getEnd(){
			//开始位置+设置的pageSize-1
			return  (this.getStart()+this.getPageSize()-1)>this.getTotalPage()? this.getTotalPage():(this.getStart()+this.getPageSize()-1);
		}
		
		
		
	}
 

    2.对应的分页方法封装在PagerDao里面,代码如下:

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class PagerDao extends HibernateDaoSupport {

   
  public PageModel getDatas(String hql,int offset,int pageSize){
	 String countHql = getCountQuery(hql);//为下面方法的调用,获取sql语句
	   
         Query query_number = this.getSession().createQuery(countHql);
	 int total = ((Long)query_number.uniqueResult()).intValue();//总记录
	 
         Query query_datas = this.getSession().createQuery(hql);	 
	 
	 List<?> datas=null;
	 if(offset==-1&&pageSize==-1){
		 datas = query_datas.list();
	 }else{
		 datas = query_datas.setFirstResult(offset).setMaxResults(pageSize).list();//生成list集合
	 }
	 
	 int totalPage = total % pageSize == 0 ? total/ pageSize : total / pageSize + 1;
	 PageModel pm = new PageModel();
	 pm.setDatas(datas);
	 pm.setTotal(total); //添加总的页面数
	 pm.setTotalPage(totalPage);
	 
	 return pm;
  }
  /**
   * 根据HQL语句生成对应的查询语句
   * @param hql
   * @return
   */
  private String getCountQuery(String hql){
	  System.out.println(hql);
	  int index = hql.indexOf("from");
	  
	  if(index!=1){
		  String s = "select count(*)"+hql.substring(index);
	      return s;
	  }
	  throw new RuntimeException("无效的HQL查询语句!");
  }

}
3.接下来时展现分页方法的实现,如下:


4.对应的action

	public String show() throws Exception{
		HttpServletRequest request = ServletActionContext.getRequest();	
		if (currentPage == 0) {
			currentPage = 1;
		} else {
			currentPage = Integer.parseInt(request.getParameter("currentPage"));
		}
		int offset =(currentPage-1)*pageSize;
		PageModel pageModel=this.bbsManager.showBBS(offset, pageSize);
		pageModel.setPageSize(4);//这两个人的作用是:前台取出数据时的分页
		pageModel.setCurrentPage(currentPage);

	    request.setAttribute("bbsPm",pageModel);	
		return "show_success";
	}
	

5.前台展现页面实现


展现效果如下图:



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:75931次
    • 积分:1376
    • 等级:
    • 排名:千里之外
    • 原创:63篇
    • 转载:6篇
    • 译文:0篇
    • 评论:9条
    最新评论