2013-11-21 61 views
0

我在這裏有一個小小的爭鬥,這是我的問題:我有一個表,其內容取自一個包含2個字符串變量和一個bean列表的內容由2個字符串變量和一個MultipartFile組成。所以,在這種情況下我呈現給用戶的表是這樣的:

table populated with beans添加新行後提交表單後的問題

問題是當我嘗試實施了「添加圖片」的功能:在表中的新行被顯示,但提交後我在控制器中接收的bean的值將新值放入列表中的最後一個bean,即如果在「Bean 2 - field 1」的新輸入中,我在控制器中放入「new_value_5」,我會收到「值5,new_value_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> 

而且豆類的結構:

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 
} 

,因爲我認爲這是沒有必要的我沒有指定的代碼在控制器,但如果你想讓它讓我知道。
我會很感激,如果有人可以給我一個什麼這裏發生了線索。提前致謝。
編輯:我試過訪問n + 1索引(list_of_bean_2[${imgStatus.index + 1}]),但得到了ConcurrentModificationException
有人請在這裏一點幫助?

回答

0

最後,我管理自己解決這個問題,如果有人知道更好的解決方案,我將不勝感激,但在此期間,這是我的解決方案。相反,有一個按鈕,做我創建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; 
    }); 

以前的功能將添加一個新行到表中,它會禁用「添加圖片」按鈕。

$(".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!!'); 
      } 
     }); 
    } 
}); 


最後一個函數將提交值到控制器:我讀值的FIELD1場2,則形式(只是爲了獲得URL),最後圖像,當我提交的所有信息到控制器我收到我的豆,其中包含2個字符串變量(filed1和域2)和圖像一org.springframework.web.multipart.MultipartFile的一個實例。