Java 添加新行提交表单后出现的问题

Java 添加新行提交表单后出现的问题,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我在这里有一点争论,这是我的问题:我有一个表,它的内容取自一个bean,其中包含2个字符串变量和一个bean列表,这些bean又由2个字符串变量和一个多部分文件组成。因此,在这个场景中,我向用户呈现一个如下所示的表: 当我尝试实现“添加图像”功能时,问题出现了:表中显示了一个新行,但在提交值之后,我在控制器中接收的bean将新值放入列表中的最后一个bean中,即,如果在我接收的控制器中的“bean 2-字段1”的新输入中,我将“新值”\u 5”“value 5,new\u value\u 5”

我在这里有一点争论,这是我的问题:我有一个表,它的内容取自一个bean,其中包含2个字符串变量和一个bean列表,这些bean又由2个字符串变量和一个多部分文件组成。因此,在这个场景中,我向用户呈现一个如下所示的表:

当我尝试实现“添加图像”功能时,问题出现了:表中显示了一个新行,但在提交值之后,我在控制器中接收的bean将新值放入列表中的最后一个bean中,即,如果在我接收的控制器中的“bean 2-字段1”的新输入中,我将“新值”\u 5”“value 5,new\u value\u 5”进入列表中最后一个bean的“字段1”,我没有收到该bean的新实例,我只是将所有值放入列表的最后一个bean中。 这是我在jsp页面中的代码:

    <form:form action="myaction.html" method="post" modelAttribute="main_bean" enctype="multipart/form-data">
    <table>
        <tr>
            <td>Bean 1 - field 1: <form:input path="bean1_field1"/></td>
        </tr>
        <tr>
            <td>Bean 1 - field 2: <form:input path="bean1_field2"/></td>
        </tr>
        <tr>
            <td>Images:
                <table id="imgTable">
                    <tbody>
                    <c:forEach var="bean_2" items="${main_bean.list_of_bean_2}" varStatus="imgStatus">
                        <tr>
                            <td>
                                <img src="image/${main_bean.id}/${bean_2.pathImage}" class="imagen" width="100px;" height="100px;" id="idImage">
                                <div id="divFile" style="display:none;"><!-- When the user wants to add a new image I enable this input-->
                                    <form:input type="file" path="${bean_2.image}" name="imagen" id="imgFile"/>
                                </div>
                            </td>
                            <td>
                                Bean 2 - field 1: <form:input path="list_of_bean_2[${imgStatus.index}].field1" id="field1Id"/>
                                <form:input type="hidden" path="list_of_bean_2[${imgStatus.index}].id"/>
                            </td>
                            <td>
                                Bean 2 - field 2: <form:input path="list_of_bean_2[${imgStatus.index}].field2" id="field2Id"/>
                            </td>
                        </tr>
                    </c:forEach>
                    </tbody>
                </table>
            </td>
            <td>
                <input type="button" value="Add image" id="addImgBtn" class="addImgBtn">
            </td>
        </tr>
        <tr>
            <td><input type="submit" value="Confirm changes" > </td>
            <td><input type="button" value="Cancel changes" > </td>
        </tr>
    </table>
</form:form>

Bean 1-字段1:
Bean 1-字段2:
图像:
Bean 2-字段1:
Bean 2-字段2:
以及豆子的结构:

public class Bean1 {
    private List<Bean2> imagesCampaign;
    private String field1;
    private String field2;
    //getters and setters
}

public class Bean2 {
    private MultipartFile image;
    private String field1;
    private String field2;
    //getters and setters
}
公共类Bean1{
私人列表图像设计;
私有字符串字段1;
私有字符串字段2;
//接球手和接球手
}
公共类Bean2{
私有多部分文件映像;
私有字符串字段1;
私有字符串字段2;
//接球手和接球手
}
我没有在控制器中指定代码,因为我认为没有必要,但如果您需要,请告诉我。
如果有人能告诉我这里发生了什么,我将非常感激。提前谢谢。
编辑:我尝试访问n+1索引(
list\u of_bean\u 2[${imgStatus.index+1}]
),但得到了一个
ConcurrentModificationException


有人能帮我一点忙吗?

最后我自己解决了这个问题,如果有人知道更好的解决方案,我将不胜感激,但同时这是我的解决方案。没有按钮来完成我创建的所有工作2:第一个按钮只会为新图像添加一行,第二个按钮将提交添加的数据,因此,这是我的javascript:

    $(".addImgBtn").click(function() {
        $('#imgTable tbody>tr:last').clone(true).insertAfter('#imgTable tbody>tr:last');
        $("#imgTable tbody>tr:last #field1").val('');
        $("#imgTable tbody>tr:last #field2").val('');
        $("#imgTable tbody>tr:last #divFile").show();
        $(".addImgBtn").attr("disabled", "true");
        return false;
    });
上一个函数将向表中添加新行,并禁用“添加图像”按钮


最后一个函数将把值提交给控制器:我读取字段1字段2表单(只是为了获取url)的值,最后是图像,当我将所有内容提交给控制器时,我会收到一个包含两个字符串变量的bean实例(用于文件1和字段2)和图像的
org.springframework.web.multipart.MultipartFile

    $(".confirmImgBtn").click(function(eve) {
    var field1 = $("#imgTable tbody>tr:last #field1").val();
    var field2 = $("#imgTable tbody>tr:last #field2").val();
    var form = $('#confirmImgForm');
    var newfile = $("#imgTable tbody>tr:last #imgFile")[0].files[0];
    var formdata = false;
    if (window.FormData) {
        formdata = new FormData();
    }
    if ( window.FileReader ) {
        reader = new FileReader();
        reader.onloadend = function (e) {
            //showUploadedItem(e.target.result, file.fileName);
        };
        reader.readAsDataURL(newfile);
    }
    if (formdata) {
        formdata.append("image", newfile);
        formdata.append("field1",field1);
        formdata.append("field2",field2);
    }
    if (formdata) {
        jQuery.ajax({
            url: form.attr('action'),
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false,
            success: function (res) {
                alert('succeed!!');
            }
        });
    }
});