You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring MVC提交编辑表单后Controller无法获取List类型表单数据问题

解决方案

核心原因

Spring MVC 绑定集合类型的表单参数时,要求表单字段的name属性必须符合[索引下标].属性名的格式,且集合需要通过外层对象封装才能被@ModelAttribute正确识别。你当前遍历生成的输入框没有带索引标识,也没有对应的外层表单封装类,导致参数无法映射到ArrayList。

修复步骤

1. 修改JSP表单遍历逻辑

给<c:forEach>添加varStatus属性获取遍历索引,输入框的path属性带上索引下标:

<form:form method="POST" action="EditSpringFallPlanNumberActionForm" modelAttribute="EditSpringFallPlanNumberFormAttribute" role="form">
    <!-- 添加varStatus属性获取当前遍历的索引 -->
    <c:forEach var="springFallPlanNumberValue" items="${SPRING_FALL_PLAN_NUMBER_LIST}" varStatus="status">
        <!-- UID输入框 -->
        <form:input path="planNumberList[${status.index}].uid" />
        <!-- Fall Plan Number输入框 -->
        <form:input path="planNumberList[${status.index}].fallPlanNumber" />
        <!-- Spring Plan Number输入框 -->
        <form:input path="planNumberList[${status.index}].springPlanNumber" />
    </c:forEach>
    <button type="submit">提交</button>
</form:form>

2. 新增外层表单封装类

你不能直接用ArrayList作为@ModelAttribute的绑定对象,需要新增一个外层类封装List集合:

// 外层表单封装类
public class EditSpringFallPlanNumberForm {
    private List<FallSpringPlanNumber> planNumberList;

    // 必须保留无参构造方法,Spring初始化对象需要
    public EditSpringFallPlanNumberForm() {}

    // 必须补全属性的Getter和Setter方法
    public List<FallSpringPlanNumber> getPlanNumberList() {
        return planNumberList;
    }

    public void setPlanNumberList(List<FallSpringPlanNumber> planNumberList) {
        this.planNumberList = planNumberList;
    }
}

3. 修改Controller接收逻辑

把接收参数替换为外层封装类即可:

@PostMapping("/EditSpringFallPlanNumberActionForm")
public String editPlanNumber(@ModelAttribute("EditSpringFallPlanNumberFormAttribute") EditSpringFallPlanNumberForm form) {
    List<FallSpringPlanNumber> fallSpringPlanNumber = form.getPlanNumberList();
    // 此时fallSpringPlanNumber即可正常获取到提交的所有表单数据
}

注意事项

  • FallSpringPlanNumber类必须提供无参构造方法,以及所有需要绑定属性的Getter、Setter方法
  • 表单提交的索引必须是连续的整数,不能出现跳号,否则索引中断后的内容会无法绑定
  • 如果有动态新增/删除行的需求,提交前需要重新整理所有输入框的索引,保证连续性

内容的提问来源于stack exchange,提问作者chris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:54:04