若依框架列表分页功能失效解决办法

这篇具有很好参考价值的文章主要介绍了若依框架列表分页功能失效解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在近期针对若依框架进行开发的过程中,发现通过controller层对查询出的列表数据进行修改封装(将部分数据字段做了码值映射处理,整体条数未发生变化)后,分页功能会出现问题:查询列表的时候明明有上百条数据,但却显示total只有10条,且只有一页。经过debug分析发现主要问题存在于以下语句中:

return getDataTable(list)

这个方法来自于BaseController这个类,对应方法的具体代码如下:

    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTable(List<?> list)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }

经过一步步debug调试分析,发现问题出现在setTotal方法中的new PageInfo(list)语句中,按照正常的处理逻辑,此处传入的list应该是Page类型的对象,但是由于我对查询的数据进行了修改封装,数据对象类型是ArrayList,因此会进入该对象的另一个分支判断,从而只计算出当前查询条件下的数据条数,并影响了后续的分页功能。PageInfo中相关的代码如下:

public PageInfo(List<T> list, int navigatePages) {
        super(list);
        this.isFirstPage = false;
        this.isLastPage = false;
        this.hasPreviousPage = false;
        this.hasNextPage = false;
        if (list instanceof Page) {
            Page page = (Page)list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.pages = page.getPages();
            this.size = page.size();
            if (this.size == 0) {
                this.startRow = 0L;
                this.endRow = 0L;
            } else {
                this.startRow = page.getStartRow() + 1L;
                this.endRow = this.startRow - 1L + (long)this.size;
            }
        } else if (list instanceof Collection) {
            this.pageNum = 1;
            this.pageSize = list.size();
            this.pages = this.pageSize > 0 ? 1 : 0;
            this.size = list.size();
            this.startRow = 0L;
            this.endRow = list.size() > 0 ? (long)(list.size() - 1) : 0L;
        }

        if (list instanceof Collection) {
            this.calcByNavigatePages(navigatePages);
        }

    }

从网上寻找了相关的解决办法,感觉都比较复杂,为了尽可能简单地解决我的开发需求,我在BaseController类中新增了一个方法,参数中传入两个不同的对象,一个是startPage()后紧跟着的查询语句的list结果对象(实际上是Page类),另一个是我封装处理后的list对象(ArrayList类),在setTotal方法处理时传入对应的Page类,其他方法使用封装后的list类,最终达到了我需要的功能效果。

在BaseController中新增的方法代码如下:

    /**
     * 响应请求分页数据
     * list为封装后的ArrayList列表对象,list2为startPage()后得到的Page列表对象,两者数据条数需保持一致
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTableFrom2Lists(List<?> list,List<?> list2)
    {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list2).getTotal());
        return rspData;
    }

在业务Controller中调用代码如下:文章来源地址https://www.toymoban.com/news/detail-597781.html

    @GetMapping("/list")
    public TableDataInfo list(Schedule schedule) {
        startPage();
        List<Schedule> list = scheduleService.selectScheduleList(schedule);
        List<ScheduleDto> scheduleDtoList = arrange(list);
        return getDataTableFrom2Lists(scheduleDtoList,list);
    }

    private List<ScheduleDto> arrange(List<Schedule> list) {
        //……数据对象封装代码……
    }

到了这里,关于若依框架列表分页功能失效解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 若依数据分页功能的实现

    目录 一、问题引出  二、原理分析: ①前端部分: ②后端部分: 三、总结 我们可以注意到若依界面中处理大量数据时,一个页面展示不过来时,会采纳多页处理的方法。 此时我们拿若依里边的系统管理中的日志管理的登录日志浏览分页的效果。 我们分别从前后端两方面去

    2024年01月17日
    浏览(34)
  • 基于RuoYi若依vue的数据分页功能的前后端代码详解

    目录 1.前端代码 1.1首先在前端会有一个 组件,为分页组件 1.2前端获取列表函数以及访问后端的URL与请求方式 1.3开发者工具查看前端访问后端信息  1.4开发者工具查看前端接收到后端的回应信息 2.后端代码 2.1接口 2.2接口内方法的代码 2.3后端Log输出如下   在打开相应的表后

    2023年04月16日
    浏览(33)
  • element ui el-table分页多选功能失效

    编写 项目是遇到一个坑: selection-change :当选择项发生变化时会触发该事件(当分页切换时,选中的数据都会自动清空) 一、在el-table中 二、在el-table-column中 添加上述刷新重试即可

    2024年04月23日
    浏览(57)
  • element ui el-table展示列表,结合分页+过滤功能

    vue+element-ui实现的列表展示,列表分页,列表筛选功能 el-table模块下面是分页器代码 el-pagination/el-pagination 分页器  layout 属性表示组件布局 设置 layout ,表示分页器需要显示的内容,用逗号分隔,布局元素会依次显示。 prev 表示上一页, next 为下一页, pager 表示页码列表,除

    2024年01月25日
    浏览(47)
  • 若依分离版——解决配置双数据源oracle,mysql分页错误问题

    1. 按照若依的手册配置双数据源mysql,oracle   2. 在service指定 数据源 @DataSource(value = DataSourceType.MASTER) 或者@DataSource(value = DataSourceType.SLAVE) 3. 发现出现使用分页的情况下报错,不使用分页时正常。 4.  最后找到解决办法,是application.yml文件的pagehelper分页配置有误,正确配置如

    2024年02月15日
    浏览(41)
  • 若依框架内自带的excel导入导出功能

    若依这个框架非常的神la奇ji,每次我想加入某个功能的时候都会报一些奇奇怪怪的错,其他项目里能用的代码复制粘贴过来就报错,然后逛一下官网发现官网已经集成了,然后用他官方集成的就不报错.就只许用你的不许用我自己的是吧?不多吐槽,下面开始. 导入: controller层:官方是

    2024年02月14日
    浏览(33)
  • layui各种事件无效(例如表格重载或 分页插件按钮失效)的解决方法

    下图是我一个系统的操作日志,在分页插件右下角嵌入了一个导出所有数据的按钮 ,代码没有任何问题,点击导出按钮却失效   排查之后,发现表格标签table定义了ID又定义了lay-filter,因我使用的layui从2.7.6升级到2.8.11,升级2.8+之后新增了ID,与原本的lay-filter功能基本一致,

    2024年02月15日
    浏览(40)
  • 关于MyBatis拦截器失效问题的解决(多数据源、分页插件)

    最近做了一个备份被delete语句删除的数据的小插件,是用MyBatis的拦截器去做的。 但是发现在一个项目中会失效,没有去备份删除的数据,查看日志发现请求并没有进入到拦截器中,换句话说就是拦截器失效了。 百度了一下(哎,百度)发现说的最多的就是分页插件导致的,

    2024年02月14日
    浏览(33)
  • 若依框架图片上传、富文本框编辑器功能

    现在的需求是:实现一个项目展示模块,后端管理页面除了需要基础信息外,要加上一个 图片上传和富文本框编辑器功能 。 点击”图片存储地址”:可上传电脑任何位置的图片,并可对图片进行放大,缩小,和旋转。 存入数据库的图片以url地址存放 url直接百度可看到图片

    2024年04月13日
    浏览(54)
  • 【若依后管框架(前后端分离版)】 如何部署若依以及添加自己的功能模块和菜单

    【若依后管框架(前后端分离版)】 如何添加自己的功能模块以及菜单 【文章开始之前,先说一句,若依牛逼!】 1 若依框架简介 RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包