Java Spring MVC视图呈现和绑定ArrayList<;客户模型>;使用表单提交返回控制器

Java Spring MVC视图呈现和绑定ArrayList<;客户模型>;使用表单提交返回控制器,java,spring-mvc,jsp,model-view-controller,taglib,Java,Spring Mvc,Jsp,Model View Controller,Taglib,我在提交表单时将ArrayList发回控制器时遇到问题。我可以通过以下方式获得我的价值观: @RequestBody MultiValueMap<String, String> formData public class CustomPayCodesWrapper { public ArrayList<CustomPayCodesModel> customCodes; public ArrayList<CustomPayCodesModel&g

我在提交表单时将ArrayList发回控制器时遇到问题。我可以通过以下方式获得我的价值观:

@RequestBody MultiValueMap<String, String> formData
public class CustomPayCodesWrapper {

    public ArrayList<CustomPayCodesModel> customCodes;

    public ArrayList<CustomPayCodesModel> getCustomCodes() {
        return customCodes;
    }

    public void setCustomCodes(ArrayList<CustomPayCodesModel> customCodes) {
        this.customCodes = customCodes;
    }
}
My.jsp:

<c:forEach var="item" items="${payCodes.customCodes}">
    <div class="row col-md-9">

         <div class="form-group row">
             <label for="payCode" class="col-md-2 col-form-label">${item.codeName}</label>
         <div class="col-md-10">
                 <input type="text" class="form-control" id="payCode" name="${item.codeName}" value="${item.codeValue}">
             </div>
         </div>

     </div>
 </c:forEach>

${item.codeName}
我尝试了以下控制器绑定,但没有成功:

@RequestMapping(value = "updateCustomPaymentCodes", method = RequestMethod.POST)
public ModelAndView updateCustomPayCodes(ModelAndView modelAndView, @ModelAttribute(value = "payCodes") CustomPayCodesWrapper userListWrapper, 
        ArrayList<CustomPayCodesModel> customCodes, @RequestBody MultiValueMap<String, String> formData, CustomPayCodesWrapper userListWrapper2) {


    return showCustomPaymentCodes(modelAndView);
}
@RequestMapping(value=“updateCustommentCodes”,method=RequestMethod.POST)
公共模型和视图更新公司代码(ModelAndView ModelAndView,@ModelAttribute(value=“payCodes”)自定义PayCodesRapper用户列表包装器,
ArrayList customCodes、@RequestBody多值映射formData、CustomPayCodesRapper userListWrapper2){
退货展示客户付款代码(modelAndView);
}

SpringMVC在用于解析参数的html中查找特定字段格式。对于数组,它正在查找
name=“customCodes[${status.index}].codeValue”
字段。这将转换为HTML,即
name=“customCodes[0].codeValue”
name=“customCodes[1].codeValue”
等等。这些字段将被找到并用于绑定到
列表
数组
元素。我只获得了以下列表:

@PostMapping("/")
public ModelAndView updateCustomPayCodes(@ModelAttribute CustomPayCodesWrapper payCodes) {
    payCodes.customCodes.forEach(m->System.out.println(""+m.codeName+":"+m.codeValue));
    return buildModelAndView();
}


${customCode.codeName}

这是基于关于做同样事情的教程

谢谢,你说得对。使用隐藏字段+索引是关键。如果没有隐藏字段,绑定将无法工作,请继续!谢谢你接受答案。隐藏字段与绑定无关。name=“customCodes[${status.index}].codeName”字段及其格式是处理绑定的内容。请参阅更新。
@PostMapping("/")
public ModelAndView updateCustomPayCodes(@ModelAttribute CustomPayCodesWrapper payCodes) {
    payCodes.customCodes.forEach(m->System.out.println(""+m.codeName+":"+m.codeValue));
    return buildModelAndView();
}
    <c:forEach items="${payCodes.customCodes}" var="customCode" varStatus="status">
        <div class="row col-md-9">        
             <div class="form-group row">
                 <label for="payCode" class="col-md-2 col-form-label">${customCode.codeName}</label>
                 <input type="hidden" name="customCodes[${status.index}].codeName" value="${customCode.codeName}"/>
             <div class="col-md-10">
                    <input type="text" class="form-control" name="customCodes[${status.index}].codeValue" value="${customCode.codeValue}"/>
                 </div>
             </div>
         </div>
     </c:forEach>