easyui 分页功能展示

这是迎合公司需要做的分页功能,大部分代码已经提取到公共部分,只许调用即可。

一。上图

2.js代码

首先,设置datagrid是否显示分页控件 pagination:true;

然后,定义分页事件    

			  //设置分页控件   
		    $('#leftGroupGrid').datagrid('getPager').pagination({   
		        pageSize: 10,//每页显示的记录条数,默认为10   
		        pageList: [5,10,15],//可以设置每页记录条数的列表   
		        beforePageText: '第',//页数文本框前显示的汉字   
		        afterPageText: '页    共 {pages} 页',   
		        displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录', 
		    });


 

前台工作基本都已弄好,不清楚的可以看下easyui文档。

3,后台。

第一。pager.java实体类

封装了所有pager需要用的字段

    /**
     * 当前页码
     */
    private int currentPageNum;
    
    /**
     * 每页展示的数量
     */
    private int itemPerPage = PagerConst.PAGE10;
    
    /**
     * 数据的总数量
     */
    private int totalCount;
    
    /**
     * 当前的数据
     */
    private List Data;
    
    /**
     * 地址
     */
    private String baseUrl;
    
    /**
     * 展示的页码数量
     */
    private int displayPageNum = 10;
    
    /**
     * 开始和结束的边界页码数量
     */
    private int edgePageNum = 2;
    
    /**
     * 总页码
     */
    private int totalPage = 1;
    
    /**
     * 每页的第一条记录数
     */
    private int firstPerPage;
    
    /**
     * 每页的最后一条记录数
     */
    private int lastPerPage;
    
    
    /**
     * 查询条件
     */
    private Map<String,String> condition = new HashMap<String, String>();

第二。PagerHelper.java

这是一个pager帮助类,通过request.getParameter("page")和request.getParameter("rows")分别取到easyui里page和rows,这两个参数是easyui已经定义好了的,只能通过这两个名字取当前页和 每页显示的记录数,PagerConst.PAGE1,PagerConst.PAGE_STR10表示的是两个字符串常量,分别表示1和15

package com.ewolfit.easyframe.util.pager;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

public class PagerHelper
{
    public static Pager getPagerInstance(HttpServletRequest request)
    {
        return getPagerInstance(request, true);
    }
    
    public static Pager getPagerInstance(HttpServletRequest request, boolean setParameter)
    {
        Pager pager = new Pager();
        
        pager.setCurrentPageNum(1);
        pager.setBaseUrl(request.getRequestURI());
        
        if(request.getParameter("cpage")!=null)
        {
            try
            {
                pager.setCurrentPageNum(Integer.parseInt(request.getParameter("cpage")));
            }
            catch (Exception e) {
            }
        }
        
        if(request.getParameter("itemPerPage")!=null)
        {
            try
            {
                pager.setItemPerPage(Integer.parseInt(request.getParameter("itemPerPage")));
            }
            catch (Exception e) {
                
            }
        } 
        
        //判断easyui分页功能中当前页参数是否存在
        if (request.getParameter("page")!=null) {
            //当前页   
            int intPage = Integer.parseInt((request.getParameter("page") == null || request.getParameter("page") == "0") ?PagerConst.PAGE1:request.getParameter("page"));
            pager.setCurrentPageNum(intPage);
		}
        
        //判断easyui分页功能中每页显示的记录数参数是否存在
        if (request.getParameter("rows")!=null) {
            //每页显示条数   
            int number = Integer.parseInt((request.getParameter("rows") == null || request.getParameter("rows") == "0") ? PagerConst.PAGE_STR10:request.getParameter("rows"));
            pager.setItemPerPage(number);
		}
        
        if(setParameter)
        {
            Enumeration enumeration = request.getParameterNames();
            while(enumeration.hasMoreElements())
            {
                String key=(String)enumeration.nextElement();
                String[] values = request.getParameterValues(key);
                if(values.length>1)
                {
                   StringBuffer str = new StringBuffer(100);
                   for(String s : values)
                   {
                       if(!"".equals(s)) str.append(s + ",");
                   }
                   pager.addParam(key, str.substring(0, str.length()-1));
                }
                else
                {
                    if(!"".equals(values[0])) pager.addParam(key, values[0]);
                }
                
                pager.removeParam("cpage");
                pager.removeParam("itemPerPage");
            }
        }

        request.setAttribute("pager", pager);
        return pager;
    }
    
}

第三。先看控制层

groupModel是传进来的参数,

JSONResponseHepler.writeJsonForEasyuiGrid(getResponse(), pager, efList)以json数据返回。

	/**
	 * 查询所有
	 */
	public void doList() throws IOException {       
                  Pager pager = PagerHelper.getPagerInstance(getRequest());		    
		List<EfDictionaryGroup> efList = efDictionaryGroupService.findByCondition(groupModel,pager);
		JSONResponseHepler.writeJsonForEasyuiGrid(getResponse(), pager, efList);
	}

JSONResponseHepler.java里的内容

public class JSONResponseHepler {
	
	//将easyui分页对象以json数据返回
	public static void writeJsonForEasyuiGrid(HttpServletResponse response,Pager pager,List list){
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out;
		try {
			Map<String, Object> jsonMap=new HashMap<String, Object>();
	        jsonMap.put("total", pager.getTotalCount());	//total键 存放总记录数,必须的   
	        jsonMap.put("rows", list);						//rows键 存放每页记录 list  
			out = response.getWriter();
			out.print(JSONUtils.mapToJson(jsonMap));
			out.flush();

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	

	}

其实可以将这段代码直接放到上面调用部分。

第四。service层调用

	@Override
	public List<EfDictionaryGroup> findByCondition(EfDictionaryGroupModel model,Pager p) {
		return efDictionaryGroupDAO.findByCondition(model, p);
	}


第五。Dao层继承了EfBaseDAO类

buildHibernatePager(query, p)执行是hibernate分页方法

	public List<EfDictionaryGroup> findByCondition(EfDictionaryGroupModel model,Pager p) {
		log.debug("finding all EfDictionaryGroup instances");
		try {
			StringBuffer queryString = new StringBuffer("from EfDictionaryGroup a where 1=1 ");
			
			//组名
			if(!StringUtils.isEmpty(model.getGroupname())){
				queryString.append(" and a.groupname = '"+model.getGroupname()+"' ");
			}
			
			//类型
			if(!StringUtils.isEmpty(model.getType())){
				queryString.append(" and a.type = '"+model.getType()+"' ");
			}
			
			//字典表类型
			if(!StringUtils.isEmpty(model.getDicDicType())){
				queryString.append(" and a.dicDicType = '"+model.getDicDicType()+"' ");
			}
			
			//备注
			if(!StringUtils.isEmpty(model.getRemark())){
				queryString.append(" and a.remark like '%"+model.getRemark().trim()+"%' ");
			}
			
			//排序(类型,组名,值)
			queryString.append(" order by a.dicDicType ,a.type ,a.groupname ");
			
			Query query  = getSessionFactory().openSession().createQuery(queryString.toString());

			if(p != null)
			{
				buildHibernatePager(query, p);
			}
			
			return query.list();
			
		} catch (RuntimeException re) {
			log.error("find all failed", re);
			throw re;
		}
	}

第六。EfBaseDAO.java
        query.setFirstResult((pager.getCurrentPageNum() - 1)*pager.getItemPerPage());query.setMaxResults(pager.getItemPerPage())重点,不懂的可以上网查,buildHibernatePager(Query query,Pager pager)方法直接返回从哪条记录开始取数据,然后取多少条记录,返回的还是Query对象。

public class EfBaseDAO extends HibernateDaoSupport {
	
	public static Log log = LogFactory.getLog(EfBaseDAO.class);
	
	protected void buildHibernatePager(Query query,Pager pager){
		pager.setTotalCount(query.list().size());
		
		query.setFirstResult((pager.getCurrentPageNum() - 1)*pager.getItemPerPage());
		query.setMaxResults(pager.getItemPerPage());	
	}
	
	protected void closeSessionAndQuery(Session session,Query query){
		if(session != null) session.close();
		if(query != null) query = null;	
	}
	
}

通过上述将返回一个list对象即List<EfDictionaryGroup> efList = efDictionaryGroupService.findByCondition(groupModel,pager)

在通过JSONResponseHepler.writeJsonForEasyuiGrid(getResponse(), pager, efList)封装pager,eflist,返回JSON数据。

 

分页功能已经结束,但是上面会出现问题,当你重新查询时,request.getParameter("page")和request.getParameter("rows")取到的是没查询之前的pager数据,而不是重新刷新到第一页。

  • 下面是解决办法:

            在查询按钮事件中加入这几句,就可以解决查询后,从第一页显示

			//解决查询时分页对象不能回到首页
			$('#leftGroupGrid').datagrid('options').pageNumber = 1;
			$('#leftGroupGrid').datagrid('getPager').pagination({pageNumber: 1});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值