首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

EasyUI Datagrid 開啟 pagination 導致 SpringMVC 控制器無法接收參數

     編輯:程式設計疑難解答

問題現象

EasyUI Datagrid 設置 pagination: true 後,請求無法進入 SpringMVC 控制器方法;註釋掉則正常。

根本原因

開啟分頁後,EasyUI 會自動附加分頁參數:

  • page:當前頁碼(從 1 開始)
  • rows:每頁行數

若後端控制器方法參數未聲明這兩個參數,或類型不匹配、綁定失敗,SpringMVC 會拋出 400 Bad Request 或參數解析異常,導致請求不進入方法體。

解決方案

1. 控制器方法顯式接收分頁參數

@RequestMapping("/list")
@ResponseBody
public DataGridResult list(
    @RequestParam(defaultValue = "1") int page,
    @RequestParam(defaultValue = "20") int rows,
    // 其他查詢條件參數...
) {
    // 業務邏輯
    return new DataGridResult(total, rowsList);
}

2. 使用實體類接收(推薦)

public class PageRequest {
    private int page = 1;
    private int rows = 20;
    // getter/setter
}

@RequestMapping("/list")
@ResponseBody
public DataGridResult list(PageRequest pageRequest, QueryCondition condition) {
    // pageRequest.page, pageRequest.rows 自動綁定
}

3. 檢查前端發送的參數名

F12 Network 面板查看實際請求:

Request URL: /list?page=1&rows=20&otherParam=xxx
Request Method: GET
Status Code: 200 OK

確保參數名與後端一致(page/rows),若自定義需在 Datagrid 配置:

$('#dg').datagrid({
    pagination: true,
    pagePosition: 'bottom',
    pageNumber: 1,
    pageSize: 20,
    pageList: [10,20,50],
    queryParams: { otherParam: 'xxx' } // 額外參數
});

常見坑點

現象原因解決
400 Required Integer parameter 'page' is not present未加 @RequestParam 或 defaultValue添加默認值
進入方法但 page=0EasyUI 傳 page=1,但實體類初始值為 0實體類初始化 page=1
總數 total 返回錯誤導致分頁條異常後端未返回 total 字段返回對象必須包含 total 和 rows

返回數據格式規範

{
    "total": 100,
    "rows": [
        {"id":1,"name":"張三"},
        {"id":2,"name":"李四"}
    ]
}

總結

EasyUI 分頁會自動發送 page/rows,後端必須聲明接收。建議封裝 PageRequest 基類,所有列表接口統一繼承,徹底解決參數綁定問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved