首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring MVC 學習筆記 (13) - 集合類型參數綁定全解析

     編輯:Java 綜合教學

Spring MVC 註解開發:數組、List 與 Map 參數綁定實戰

批量操作是企業級應用的高頻需求。Spring MVC 提供強大的集合類型綁定機制,支援數組、List、Map 等多種形式,配合包裝 POJO 可輕鬆處理批量刪除、批量修改等複雜場景。

一、數組綁定:批量刪除的經典案例

需求:用戶勾選多個商品 ID 進行批量刪除。

Controller 定義:直接使用數組接收同名參數。

@RequestMapping("/deleteItems")
public String deleteItems(Integer[] items_id) throws Exception { ... }

前端 JSP:多個 checkbox 共用 name="items_id"。

<c:forEach items="${itemsList}" var="item">
  <input name="items_id" type="checkbox" value="${item.id}" /> ${item.name}
</c:forEach>

Spring MVC 會自動將所有同名參數值轉換為 Integer[] 數組注入方法參數。

二、List 綁定:批量修改的進階用法

需求:頁面同時編輯多條商品記錄並一次性提交。

核心技巧:在包裝 VO 中定義 List<ItemsCustom> itemsList 屬性,前端參數名包含索引下標。

包裝類定義:

public class ItemsQueryVo {
    private List<ItemsCustom> itemsList;
    // getter/setter
}

Controller 方法:

@RequestMapping("/editItemsAllSubmit")
public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo) throws Exception {
    // itemsQueryVo.getItemsList() 即包含所有提交的商品對象
    return "success";
}

前端命名規則(關鍵):

<c:forEach items="${itemsList}" var="item" varStatus="status">
  <input name="itemsList[${status.index}].name" value="${item.name}" />
  <input name="itemsList[${status.index}].price" value="${item.price}" />
  <input name="itemsList[${status.index}].detail" value="${item.detail}" />
</c:forEach>

格式:包裝VO中的List屬性名[索引].子對象屬性名。索引從 0 開始,需使用 varStatus 獲取。

三、Map 綁定:動態鍵值對處理

同理,在包裝類中定義 Map<String, Object> 屬性,前端參數名格式為 map屬性名[key].屬性名。

public class QueryVo {
    private Map<String, Object> itemInfo = new HashMap<>();
    // getter/setter
}

Controller 直接接收 QueryVo 即可獲取動態提交的鍵值數據。

對比總結與避坑指南

類型參數名格式適用場景
數組name="ids"簡單同類型值集合(如批量刪除 ID)
Listname="listProp[0].field"批量提交對象數據(如批量編輯、成績錄入)
Mapname="mapProp[key].field"動態鍵值對、非固定結構數據

注意:List/Map 綁定必須放在包裝 POJO 中,不能直接作為 Controller 方法參數;前端索引必須連續且從 0 開始,否則綁定失敗。

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