若依管理系统源码分析-分页的实现以及post请求时的分页

摘要:
将此俩个参数封装进queryParams对象中,此对象也包含前端要传递给后端的查询参数。上面分页控件的进行分页时会执行getList方法,此方法是请求后台数据的方法。来到js对应的方法listLxsz中exportfunctionlistLxsz{returnrequest}其中request是封装的axios的对象,用来发送请求。这里是get请求并且传递了查询参数对象。list是后台查询的需要返回前端的数据,此方法必须放在此查询之前。那么这两个分页参数时来自pageDomain这个实体类。
场景

官方示例分页实现

前端调用实现

//一般在查询参数中定义分页变量
queryParams: {
  pageNum: 1,
  pageSize: 10},

//页面添加分页组件,传入分页变量
<pagination
  v-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"
/>

//调用后台方法,传入参数 获取结果
listUser(this.queryParams).then(response =>{
    this.userList =response.rows;
    this.total =response.total;
  }
);

后台逻辑实现

@PostMapping("/list")
@ResponseBody
publicTableDataInfo list(User user)
{
    startPage();  //此方法配合前端完成自动分页
    List<User> list =userService.selectUserList(user);
    returngetDataTable(list);
}

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

使用若依自动生成的代码

前端使用pagination控件,基于Bootstrap的轻量级表格插件 BootstrapTable

    <pagination
      v-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"
    />

其中pageNum代表当前页号,即第几页,pageSize代表每页显示的条数。

将此俩个参数封装进queryParams对象中,此对象也包含前端要传递给后端的查询参数。

首先要对此查询对象进行声明

      //查询参数
queryParams: {
        pageNum: 1,
        pageSize: 10,
        gh: undefined,
        xm: undefined,
        lxyf: undefined,
      },

并且给pageNum和pageSize设置默认值,其他参数是绑定的查询参数,比如工号、姓名等。

上面分页控件的进行分页时会执行getList方法,此方法是请求后台数据的方法。

在此方法中

getList() {
      listLxsz(this.queryParams).then((response) =>{
        this.lxszList =response.rows;
        this.total =response.total;
      });
    },

调用js接口方法的listLxsz方法并将查询参数对象作为参数传递。

其中就包含分页所需的两个参数。

来到js对应的方法listLxsz中

export function listLxsz(query) {
  returnrequest({
    url: '/kqgl/lxsz/list',
    method: 'get',
    params: query
  })
}

其中request是封装的axios的对象,用来发送请求。

这里是get请求并且传递了查询参数对象。

来到SpringBoot对应的接口中

    @GetMapping("/list")
    publicTableDataInfo list(KqLxsz kqLxsz)
    {
        startPage();
        List<KqLxsz> list =kqLxszService.selectKqLxszList(kqLxsz);
        returngetDataTable(list);
    }

后台需要调用startPage方法,并且此方法必须放在查询出数据的前一行。

list是后台查询的需要返回前端的数据,此方法必须放在此查询之前。

进入到startPage方法中

    protected voidstartPage()
    {
        PageDomain pageDomain =TableSupport.buildPageRequest();
        Integer pageNum =pageDomain.getPageNum();
        Integer pageSize =pageDomain.getPageSize();
        if (StringUtils.isNotNull(pageNum) &&StringUtils.isNotNull(pageSize))
        {
            String orderBy =SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
            PageHelper.startPage(pageNum, pageSize, orderBy);
        }
    }

分析:

最终是调用的MyBatis的PageHelper来进行分页,只需要给其传递分页所需的两个参数和排序字段即可。

那么这两个分页参数时来自pageDomain这个实体类。

进入到生成这个实体类的方法TableSupport.buildPageRequest中

    public staticPageDomain buildPageRequest()
    {
        returngetPageDomain();
    }

返回的是getPageDomain这个方法的返回值,进入到该方法

    public staticPageDomain getPageDomain()
    {
        PageDomain pageDomain = newPageDomain();
        pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
        pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));
        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
        returnpageDomain;
    }

可以看到此实体类的分页的参数是从工具类ServletUtils中获取的参数

其中ServletUtils是客户端工具类

package com.ruoyi.common.utils;

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.ruoyi.common.core.text.Convert;

/**
 * 客户端工具类
 * 
 * @author ruoyi
 */
public classServletUtils
{
    /**
     * 获取String参数
     */
    public staticString getParameter(String name)
    {
        returngetRequest().getParameter(name);
    }

    /**
     * 获取String参数
     */
    public staticString getParameter(String name, String defaultValue)
    {
        returnConvert.toStr(getRequest().getParameter(name), defaultValue);
    }

    /**
     * 获取Integer参数
     */
    public staticInteger getParameterToInt(String name)
    {
        returnConvert.toInt(getRequest().getParameter(name));
    }

    /**
     * 获取Integer参数
     */
    public staticInteger getParameterToInt(String name, Integer defaultValue)
    {
        returnConvert.toInt(getRequest().getParameter(name), defaultValue);
    }

    /**
     * 获取request
     */
    public staticHttpServletRequest getRequest()
    {
        returngetRequestAttributes().getRequest();
    }

    /**
     * 获取response
     */
    public staticHttpServletResponse getResponse()
    {
        returngetRequestAttributes().getResponse();
    }

    /**
     * 获取session
     */
    public staticHttpSession getSession()
    {
        returngetRequest().getSession();
    }

    public staticServletRequestAttributes getRequestAttributes()
    {
        RequestAttributes attributes =RequestContextHolder.getRequestAttributes();
        return(ServletRequestAttributes) attributes;
    }

    /**
     * 将字符串渲染到客户端
     * 
     * @param response 渲染对象
     * @param string 待渲染的字符串
     * @return null
     */
    public static String renderString(HttpServletResponse response, String string)
    {
        try{
            response.setStatus(200);
            response.setContentType("application/json");
            response.setCharacterEncoding("utf-8");
            response.getWriter().print(string);
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 是否是Ajax异步请求
     * 
     * @param request
     */
    public staticboolean isAjaxRequest(HttpServletRequest request)
    {
        String accept = request.getHeader("accept");
        if (accept != null && accept.indexOf("application/json") != -1)
        {
            return true;
        }

        String xRequestedWith = request.getHeader("X-Requested-With");
        if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
        {
            return true;
        }

        String uri =request.getRequestURI();
        if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
        {
            return true;
        }

        String ajax = request.getParameter("__ajax");
        if (StringUtils.inStringIgnoreCase(ajax, "json", "xml"))
        {
            return true;
        }
        return false;
    }
}
获取分页参数时调用的getParameterToInt定义如下

    /**
     * 获取Integer参数
     */
    public staticInteger getParameterToInt(String name)
    {
        returnConvert.toInt(getRequest().getParameter(name));
    }

调用了getRequest方法,此方法定义如下

    /**
     * 获取request
     */
    public staticHttpServletRequest getRequest()
    {
        returngetRequestAttributes().getRequest();
    }

此方法是获取request请求参数

而request请求对象是来自会话session,所以在getRequestAttributes中

    public staticServletRequestAttributes getRequestAttributes()
    {
        RequestAttributes attributes =RequestContextHolder.getRequestAttributes();
        return(ServletRequestAttributes) attributes;
    }

所以最终在进行get请求时,直接将分页参数作为参数传递给后台即可。

因为在get请求时会将参数拼接在url中,这样后台就能从请求中获取分页参数并传递给MyBatis的

pageHelper实现分页。

如果是post请求那,post请求时传递的是一个实体,如果将分页参数放在实体中,则后台没法通过请求获取分页参数。

可以通过在post请求的url中添加分页参数实现

比如在如下前端请求时

getList() {
      listDdjl(this.queryParams).then((response) =>{
        this.ddjlList =response.rows;
        this.total =response.total;
        this.loading = false;
      });
    },

最终调用请求数据的方法

export function listDdjl(query) {
  returnrequest({
    url: '/kqgl/ddjl/getListBySx?pageNum='+query.pageNum+'&pageSize='+query.pageSize,
    method: 'post',
    data: query
  })
}

请求方式是post请求,分页参数存放在实体中,可以通过在url中手动拼接分页参数的方式进行传递分页参数。

免责声明:文章转载自《若依管理系统源码分析-分页的实现以及post请求时的分页》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇USB HID介绍【转】vue效果之改element的el-checkbox-group多选框组为单选可取消的单选框(样式还是多选框的样式)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Odoo 接口

1. 很多人还是习惯使用restful格式进行接口操作,但odoo已默认jsonrpc,所以需要专门写一个装饰器 def json_response(func): """返回去除封装的JSON""" @wraps(func) def decorate(*args, **kwargs): request.__raw_j...

C#:MapControl基本操作代码整理

整理了 MapConrol各基本功能的实现代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; using ESRI.ArcGI...

Vue2 使用Typescript 使用vue-property-decorator的简单介绍

参考:https://github.com/kaorun343/vue-property-decorator 怎么使vue支持ts写法呢,我们需要用到vue-property-decorator,这个组件完全依赖于vue-class-component. 首先安装:  npm i -D vue-property-decorator 我们来看下页面上代码展示...

vue升级Babel支持可选链和合并空值运算符

一、babel作用: (我偷懒了,直接用官网介绍) Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。据我所知, 无论是webpack项目还是vite项目都需要使用到babel来编译(.vue)文件。=> vite3支持jsx...

8、jeecg 笔记之 自定义word 模板导出(一)

1、前言 jeecg 中已经自带 word 的导出导出功能,其所使用的也是 easypoi,尽管所导出的 word 能满足大部分需求, 但总是有需要用到自定义 word导出模板,下文所用到的皆是 easypoi 提供的,为方便下次翻阅,故记之。 2、代码部分 2.1、controller @RequestMapping("/ftl2word") publi...

Flatbuffers学习

flatbuffers简介 FlatBuffers 是一个(二进制 buffer)序列化开源库,由 Google 开源现在它支持C++, C#, C, Go, Java, Kotlin, JavaScript, Lobster, Lua, TypeScript, PHP, Python, Rust and Swift等。 官网:http://google....