2013-04-30 110 views
2

美好的一天。 我在客戶端獲得了一個表格。在這種形式中,我得到了許多行。每行包含3個字段(日期,ID和金額)。客戶端可以添加行(在JavaScript的幫助下),因此服務器端不知道它會有多少行。春季形式映射到陣列

我需要與類映射這種形式中,表示該數據。

public class RowStruct 
{ 
    private Long id; 
    private Double amount; 
    private Date date; 

} 
public class FormStruct 
{ 
    private ArrayList<RowStruct> arrData; 
{ 

所以我需要我的表單中的數據與FormStruct對象進行映射。

@RequestMapping("/send") 
public ModelAndView getList(HttpServletRequest req,FormStruct formStruct) 
{ 
    ModelAndView model = new ModelAndView(); 

} 

這是可能的嗎?我該怎麼做?

回答

10

,你必須在客戶方/ HTML使用索引。

<input name="arrData[0].id" /> 
<input name="arrData[0].amount" /> 
<input name="arrData[0].date" /> 

添加你要增加索引的行每次。 除非你不刪除一行,它會像這樣工作。

我想你讓你的客戶刪除行,因此這不可避免地造成指數之間的差距。但是,您無需在客戶端修復此問題,在模型到達控制器後,您可以過濾arrData以獲取NULL引用。

@RequestMapping("/send") 
public ModelAndView getList(HttpServletRequest req,FormStruct formStruct) 
{ 
    Iterator<RowStruct> it = formStruct.getArrData().iterator(); 
    while (it.hasNext()) { 
     if (it.next() == null) 
      it.remove(); 
    } 
    ModelAndView model = new ModelAndView(); 

} 
0

你可以要求客戶在JSON方面發送數據,並且可以使用JSON De/Serializer轉換的Java對象

+0

嘛。這是一個解決方案。我如何從我的表單創建一個JSON?這是一種方法來執行automaticcaly,只使用表單域名稱,或者我需要獲取我的表單的行並手動添加到我的JSON中? – user2160696 2013-04-30 09:11:56

+0

http://stackoverflow.com/questions/8164802/serialize-javascript-object-into-a-json-string應該幫助 – sanbhat 2013-04-30 09:14:38

+0

這是一個解決方案,但由於春季是能夠綁定到集合,沒有必要! – 2013-04-30 10:04:28

1

是的,這是可能的。

在HTML你可以使用索引:

<input id='arrData[0].id' ... 

這樣你就可以動態地建立在客戶端

在你需要註釋的變量在服務器端的綁定:

public ModelAndView getList(HttpServletRequest req, 
          @RequestParam FormStruct formStruct)