Java 添加新行提交表单后出现的问题
我在这里有一点争论,这是我的问题:我有一个表,它的内容取自一个bean,其中包含2个字符串变量和一个bean列表,这些bean又由2个字符串变量和一个多部分文件组成。因此,在这个场景中,我向用户呈现一个如下所示的表: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将新值放入列表中的最后一个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!!');
}
});
}
});