easyui datagrad getRows 想要获取所有页数据但只能获取当前页数据的解决办法

一、导言

        工作的时候需要导出由后端传给前端easyui datagrad的分页数据

        但是调用$('#dg').datagrid('getRows');方法只能获取当前分页的数据,在网上查了相关帖子但都是“标题党”,没有实际的解决这个需求。故写了这篇文章记录一下我如何解决这个问题的思路,希望可以对后人解决此类问题提供帮助。

二、解决思路

        首先明确一点:

        easyui中  $('#dg').datagrid('getRows')指令只能获取当前分页的数据,并不能通过各种骚操作获取所有分页数据(除非魔改easyui的库)。

        从前端来说这条路封死了,那么我们可以从后端下手:

        

        以下代码是正常我们前端easyui-datagrad绑定的后端查询接口的写法

@ResponseBody
    @RequestMapping("/list")
    @RequiresPermissions(value = {"国家"}, logical = Logical.OR)
    public Map<String, Object> list(Gj gj, @RequestParam(value = "page", required = false) Integer page,
                                    @RequestParam(value = "rows", required = false) Integer rows) throws Exception {
        User user = userService.findByUserName((String) SecurityUtils.getSubject().getPrincipal());
        Map<String, Object> resultMap = new HashMap<>();
        List<Sort.Order> orders = Collections.singletonList(new Sort.Order(Sort.Direction.DESC, "id"));

        List<Gj> gjList = gjService.list(gj, page, rows, Sort.by(orders));
        Long total = gjService.getCount(gj);
        resultMap.put("rows", gjList);
        resultMap.put("total", total);
        logService.save(new Log(Log.SEARCH_ACTION, "查询国家信息"));
        return resultMap;
    }

        根据id主键降序排序,通过前端传入的实体类信息分页查询数据并返回数据行和总行数,前端datagrad每次更新都查询接口,所以每一页数据都只是部分数据,由于后端返回的数据并不是所有数据,想要获取数据就只能从后端下手。

        

        在Servicelmpl层实现通过传入实体信息和排序条件查询返回List的方法

        

@Override
    public List<Gj> listByCkhz(Gj gj, Sort sort) {
        return gjRepository.findAll(new Specification<Gj>() {
            @Override
            public Predicate toPredicate(Root<Gj> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Predicate predicate = cb.conjunction();
                //一些判断实体字段为空的逻辑,如果为空那么直接查询所有数据
                }
                return predicate;
            }
        }, sort);
    }

        再在Controller层定义一个接口,传入实体类信息,根据实体类查询出所有符合条件的数据(也就是不再分表查询,而是全部查询),获取到全部数据之后再根据各自的业务逻辑去进行下一步的操作。

        比如以我举例需要拿到所有的数据导出为Excel表格,那么可以通过遍历List数据,将每一条数据使用POI库添加行信息,最后导出表格。

        

        这样就可以解决前端不能取到所有表信息这一痛点,如果需要拿到所有数据给前端进行操作,在Controller层定义接口的时候也可以直接封装成JSON返回给前端,细节方面就按照各自不同的业务逻辑需要去做咯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值