若依管理系统源码分析-分页的实现以及post请求时的分页场景
官⽅⽰例分页实现
前端调⽤实现
// ⼀般在查询参数中定义分页变量
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 = ws;
}
);
后台逻辑实现
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(User user)
{
startPage(); // 此⽅法配合前端完成⾃动分页
List<User> list = userService.selectUserList(user);
return getDataTable(list);
}
注:
实现
使⽤若依⾃动⽣成的代码
前端使⽤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 = ws;
});
},
调⽤js接⼝⽅法的listLxsz⽅法并将查询参数对象作为参数传递。
其中就包含分页所需的两个参数。
来到js对应的⽅法listLxsz中
export function listLxsz(query) {
return request({
url: '/kqgl/lxsz/list',
method: 'get',
params: query
})
}
其中request是封装的axios的对象,⽤来发送请求。
这⾥是get请求并且传递了查询参数对象。
来到SpringBoot对应的接⼝中
@GetMapping("/list")
public TableDataInfo list(KqLxsz kqLxsz)
{
startPage();
导航页源码List<KqLxsz> list = kqLxszService.selectKqLxszList(kqLxsz);
return getDataTable(list);
}
后台需要调⽤startPage⽅法,并且此⽅法必须放在查询出数据的前⼀⾏。
list是后台查询的需要返回前端的数据,此⽅法必须放在此查询之前。
进⼊到startPage⽅法中
protected void startPage()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = PageNum();
Integer pageSize = PageSize();
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
{
String orderBy = SqlUtil.OrderBy());
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
分析:
最终是调⽤的MyBatis的PageHelper来进⾏分页,只需要给其传递分页所需的两个参数和排序字段即可。那么这两个分页参数时来⾃pageDomain这个实体类。
进⼊到⽣成这个实体类的⽅法TableSupport.buildPageRequest中
public static PageDomain buildPageRequest()
{
return getPageDomain();
}
返回的是getPageDomain这个⽅法的返回值,进⼊到该⽅法
public static PageDomain getPageDomain()
{
PageDomain pageDomain = new PageDomain();
pageDomain.ParameterToInt(PAGE_NUM));
pageDomain.ParameterToInt(PAGE_SIZE));
pageDomain.Parameter(ORDER_BY_COLUMN)); pageDomain.Parameter(IS_ASC));
return pageDomain;
}
可以看到此实体类的分页的参数是从⼯具类ServletUtils中获取的参数
其中ServletUtils是客户端⼯具类
package com.ruoyimon.utils;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.t.request.RequestAttributes;
import org.t.request.RequestContextHolder;
import org.t.request.ServletRequestAttributes;
import ext.Convert;
/**
* 客户端⼯具类
*
* @author ruoyi
*/
public class ServletUtils
{
/**
* 获取String参数
*/
public static String getParameter(String name)
{
return getRequest().getParameter(name);
}
/**
* 获取String参数
*/
public static String getParameter(String name, String defaultValue)
{
Str(getRequest().getParameter(name), defaultValue);
}
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name)
{
Int(getRequest().getParameter(name));
}
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name, Integer defaultValue)
{
Int(getRequest().getParameter(name), defaultValue);
}
/**
* 获取request
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
}
/
**
* 获取response
*/
public static HttpServletResponse getResponse()
{
return getRequestAttributes().getResponse();
}
/**
* 获取session
*/
public static HttpSession getSession()
{
return getRequest().getSession();
}
public static ServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes = RequestAttributes();
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");
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* 是否是Ajax异步请求
*
* @param request
*/
public static boolean isAjaxRequest(HttpServletRequest request)
{
String accept = Header("accept");
if (accept != null && accept.indexOf("application/json") != -1)
{
return true;
}
String xRequestedWith = Header("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1) {
return true;
}
String uri = RequestURI();
if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
{
return true;
}
String ajax = Parameter("__ajax");
if (StringUtils.inStringIgnoreCase(ajax, "json", "xml"))
{
return true;
}
return false;
}
}
获取分页参数时调⽤的getParameterToInt定义如下
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name)
{
Int(getRequest().getParameter(name));
}
调⽤了getRequest⽅法,此⽅法定义如下
/**
* 获取request
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
}
此⽅法是获取request请求参数
⽽request请求对象是来⾃会话session,所以在getRequestAttributes中
public static ServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes = RequestAttributes();
return (ServletRequestAttributes) attributes;
}
所以最终在进⾏get请求时,直接将分页参数作为参数传递给后台即可。
因为在get请求时会将参数拼接在url中,这样后台就能从请求中获取分页参数并传递给MyBatis的
pageHelper实现分页。
如果是post请求那,post请求时传递的是⼀个实体,如果将分页参数放在实体中,则后台没法通过请求获取分页参数。可以通过在post请求的url中添加分页参数实现
⽐如在如下前端请求时
getList() {
listDdjl(this.queryParams).then((response) => {
this.ddjlList = ws;
this.loading = false;
});
},
最终调⽤请求数据的⽅法
export function listDdjl(query) {
return request({
url: '/kqgl/ddjl/getListBySx?pageNum='+query.pageNum+'&pageSize='+query.pageSize,
method: 'post',
data: query
})
}
请求⽅式是post请求,分页参数存放在实体中,可以通过在url中⼿动拼接分页参数的⽅式进⾏传递分页参数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论