Layui分页需前后端参数名严格一致:前端request配置pageName/limitName,后端@RequestParam("page") Integer page、@RequestParam("limit") Integer limit;禁用data字段防本地分页;返回JSON必须含数字型count字段且code=0。

Layui 分页参数默认叫 page 和 limit,但 Spring Boot 的 @RequestParam 不会自动映射——你必须显式声明、且名字要完全一致,否则 Controller 拿到的永远是默认值(比如 page=1),查的始终是第一页。
Controller 必须用 @RequestParam("page") 显式接收
别依赖 Pageable,Layui 根本不传 pageable 相关字段;也别写成 pageNum 或 page_no,除非你改了前端 request 配置。
-
@RequestParam("page") Integer page—— 名字必须是"page",双引号不能少 -
@RequestParam("limit") Integer limit—— 同理,"limit"是 layui 默认名 - 加
defaultValue = "1"防空值,但前提是 URL 确实没带参数;如果前端配了request: { pageName: 'pageNum' },这里就得同步改成@RequestParam("pageNum") - 类型用
Integer比int更安全,避免空参 400 错误
前端 table.render() 里 request 配置不匹配,后端根本收不到
layui 默认发 page=2&limit=10,但 Spring Boot、MyBatis-Plus、PageHelper 这些主流组件默认认的是 pageNum/pageSize。不配 request,等于前端喊中文、后端只听英文。
- 必须显式写:
request: { pageName: 'pageNum', limitName: 'pageSize' } - 大小写敏感:
pageNum ≠ pagenum,后端@RequestParam("pageNum")少一个字母就 400 - 如果后端用的是
page_no=1&per_page=20,那就配pageName: 'page_no', limitName: 'per_page' - 配完立刻验证:点下一页,看 Network → Headers → Query String Parameters 里是不是出现了你配的 key
table.render() 别同时写 data 和 url
只要写了 data: [](哪怕空数组),layui 就强制走本地分页,url 彻底失效,Network 里压根不发请求——你以为分页“没反应”,其实是根本没找后端。
- 删掉所有
data字段,只留url: '/api/list'和page: true - 错误写法:
data: [], url: '/api/list', page: true→ 静默降级为前端分页 - 正确写法:
url: '/api/list', page: true,再加request和response映射 - 搜索时记得重置页码:
table.reload('demo', { where: { keyword: val }, page: { curr: 1 } }),否则搜第 5 页的数据,大概率为空
最常被忽略的是:后端返回 JSON 里缺 count 字段,或 code !== 0,layui 表格能渲染数据,但分页栏直接消失——连“共 0 页”都不显示。这个字段必须是数字类型,不能是字符串 "100"。


















