2013-10-17 127 views
0

我有這樣在表單中混合索引和非索引列表元素?

@RequestMapping(...) 
public String get(@RequestParam List<Cmd> rows) {...} 

處理程序,而且我用Spring forms tags生成的輸入。所以JSP代碼

<c:forEach var="i" begin="0" end="${fn:length(rows)}" > 
    <form:input path="rows[${i}].name" /> 
    ... 
</c:forEach> 

產生

<input name="rows[0].name" value="...' /> 

這一切都很好,但我也希望允許用戶動態地添加行,所以要寫入模板input需求。但是,name="rows.name"name="rows[].name"都不起作用,所以我必須編寫代碼來生成索引,這很煩人。

我在這裏錯過了什麼嗎?有沒有更好的方法來做到這一點?

編輯:

順便說一句,我試圖用Javascript生成動態name="rows[n].name",但如果用戶刪除在中間一排它成爲一個問題。重寫所有索引的代碼似乎是不合理的。

回答

0

您可以使用JavaScript來插入新的輸入。彈簧產生以下

<input name="rows[0].name" value="...' /> 

現在你要用戶輸入新的值,那麼你的JavaScript代碼應生成以下行

<input name="rows[1].name" value="...' /> 

,並假設用戶想要一個更大的價值的話,

<input name="rows[2].name" value="...' /> 

記住在使用Javascript生成輸入時處理索引。

+0

我最終在一些服務器端處理中使用了這個表單來消除由刪除條目創建的「空白」。 –

+0

在我們的項目中,索引是使用Javascript進行管理的。所以你得到空值刪除索引或什麼? –

+0

是的。當您從中間刪除行時,代碼先前崩潰。我添加了代碼以預先掃描列表,並在傳遞之前除去空值。使用javascript來管理索引似乎對於我正在處理的簡單表單來說太複雜了(它不會在任何地方使用異常來添加/刪除行)。 –

0

試試這個,

<form:input path="${rows[i].name}" /> 

,而不是

<form:input path="rows[${i}].name" /> 
+0

嗨,這不起作用'路徑'需要一個路徑到請求上下文中的對象不是一個值。 –