easyui datagrid实现分页

1、前台实现分页:这种方式在easyui 提供的demo中存在,粘贴复制过来如下:

  在用到的位置加上:$("#datagrid").datagrid({ loadFilter : pagerFilter}).datagrid("loadData", data.rows);

  比如说我用到的位置是查询结果返回后,那么我的是:

  function queryMenu() {
        $.post("../servlet/menu/select", {
            menuname : $("#name").val()
        }, function(data, states) {
            $("#menudatagrid").datagrid({ loadFilter : pagerFilter}).datagrid("loadData", data.rows);
        }, "json");
    }

  然后增加方法:

  function pagerFilter(data) {
        if (typeof data.length == 'number' && typeof data.splice == 'function') { // is array
            data = {
                total : data.length,
                rows : data
            }
        }
        var dg = $(this);
        var opts = dg.datagrid('options');
        var pager = dg.datagrid('getPager');
        pager.pagination({
            onSelectPage : function(pageNum, pageSize) {
                opts.pageNumber = pageNum;
                opts.pageSize = pageSize;
                pager.pagination('refresh', {
                    pageNumber : pageNum,
                    pageSize : pageSize
                });
                dg.datagrid('loadData', data);
            }
        });
        if (!data.originalRows) {
            data.originalRows = (data.rows);
        }
        var start = (opts.pageNumber - 1) * parseInt(opts.pageSize);
        var end = start + parseInt(opts.pageSize);
        data.rows = (data.originalRows.slice(start, end));
        return data;
    }

2、后台前台综合实现分页,首先前台定义好表格每页显示的行数:默认为10,我选用的是默认10.

  我要实现的目标是在初始化该表格的时候就实现数据分页显示。

  其实对于easyui来说,分页时页面需要设置pagination:true,这样,在表格下方将显示分页工具栏。分页工具栏就会主动向服务器发送二个参数:

  1、page: 页号,从1计起。

  2、rows: 每页记录大小。 

  然后你使用其他架构如果可以直接再后台接受这两个参数的话,那么处理起来就方便的多了。比如说像servlet这种的,可以直接request接收。

  但是我碰到的不是这种情况,我用的是reslet,因为以前没有用过,不知道有没有其他情况可以实现上述可以直接接收。但是我试过我能用到的接收参数的方法都不行,首先page和rows是前台默认传入后台的,不需要你在前台设置参数,你只需要在后台接收即可,但是reslet不能正常接收这种默认传的参数。

  所以我采用了前台后台结合的方式,首先让前台显示传送这两个参数:

  $(function() {

     var grid = $('#menudatagrid');
        var options = grid.datagrid('getPager').data("pagination").options;
        var curr = options.pageNumber;//页数,当前页是第几页
        var total = options.pageSize;//每页显示的行数,我这里是10

  $('#menudatagrid').datagrid({
            url : '../servlet/menu/getMenu',
            data : {
                "page" : curr,
                "rows" : total
            },
            method : 'post',
            
            columns : [ [.......]]

  });

    })

  后台reslet接收方法:

  @POST
    @Path("getMenu")
    public JSONObject addMenu1(Representation entity) {
        System.out.println("----------------------------");
        System.out.println("新增数据");
        Form form = new Form(entity);
        String page = form.getFirstValue("page");
        String row = form.getFirstValue("rows");
        System.out.println("---------page"+page);
        System.out.println("----------rows:"+row);
        //当前页  
        int intPage = Integer.parseInt((page == null || page == "0") ? "1":page);  
        //每页显示条数  
        int number = Integer.parseInt((row == null || row == "0") ? "10":row);  
        //每页的开始记录  第一页为1  第二页为number +1   
        int start = (intPage-1)*number;
        
        int count= ResourceHelper.findMenuCount();
        
        ArrayList<Menu> menulist = (ArrayList<Menu>) ResourceHelper.findMenu2(start,number);
        System.out.println(menulist);
        ArrayList tt = new ArrayList();
        for (int i = 0; i < menulist.size(); i++) {
            Map<String, String> map = new HashMap();
            map.put("menuid", menulist.get(i).getMenuId() + "");
            map.put("menulevel", menulist.get(i).getMenuLevel() + "");
            map.put("parentmenuid", menulist.get(i).getParentMenuId() + "");
            map.put("menuname", menulist.get(i).getMenuName() + "");
            map.put("url", menulist.get(i).getUrl());
            map.put("menuorder", menulist.get(i).getMenuOrder() + "");
            tt.add(map);

        }

        System.out.println("调用到json");
        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject.put("total", count);
            jsonObject.put("rows", tt);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }

  连接数据库使用的mybatis,值得一提的是:ArrayList<Menu> menulist = (ArrayList<Menu>) ResourceHelper.findMenu2(start,number);

  这两个参数代表的意思:start代表传进来的page页开始的行数,number代表每页显示的行数。

  然后连接数据库的时候使用:try {
                RowBounds rb = new RowBounds(start,end);
                list = session.selectList("。。。。。。",1,rb);
            } finally {
              session.close();
            }

  注:使用上述方式取出的LIST就是第几页显示的数据,不会将表中数据全部取出。比如说的每页显示10条数据,那么这样取只会取出10条数据。

    第二个参数:1 这个我也没有查清楚代表什么,1是我瞎写的。但是效果能够达到。

  

posted on 2013-10-21 14:16  dzldcp  阅读(1064)  评论(0编辑  收藏  举报