2012-01-30 46 views
3

我正在努力尋找有關List對象的Spring表單(包括驗證)的良好信息,特別是當與選擇框或複選框無關時等Spring 3與java.util.List綁定的MVC表單,包括表單錯誤和使用bindingResult驗證

我希望有一個形式對象像:

public class MyForm { 
    private List<String> values; 
    public List<String> getValues() { return this.values; } 
    public void setValues(List<String> values) { this.values = values; } 
} 

JSP:

<form:form method="post" action="${pageContext.request.contextPath}/something" commandName="myForm"> 
    ... 
    <c:forEach var="unused" items="${myForm.values}"> 
     <div><form:input path="values" /><form:errors path="values" /></div> 
    </c:forEach> 
    ... 
</form:form> 

控制器:

... 
for (String value : myForm.getValues()) { 
    if (! isValidCode(value)) { 
     bindingResult.rejectValue("values", "invalid.code", "Code unknown!"); 
    } 
} 
... 

當我提交表單時,我可以看到輸入的值正確地通過java.util.List。

當表單被再次呈現: 一個)每個輸入字段具有相同的值(最後的值輸入的),和 B)形式:錯誤示出了用於每一個領域,包括有效值的多個錯誤消息。

是否有什麼問題,我如何c:forEach遍歷列表,導致每個輸入字段獲得相同的值?

是否有可能做這樣的事情:

if (! isValidCode(value)) { 
     bindingResult.rejectValue("values[" + i + "], "invalid.code", "Code unknown!"); 
    } 

和:

<c:forEach var="unused" items="${values}" varStatus="status"> 
    <div><form:input path="values" /><form:errors path="values[${status.index}]" /></div> 
</c:forEach> 

具體地說,這是不行的,我已經嘗試了一些變化形式並不能似乎得到它的工作 - 任何想法/幫助將不勝感激!

謝謝。

回答

0

兩個表單標籤應該具有相同的路徑:

<c:forEach items="${values}" varStatus="status"> 
    <div><form:input path="values[${status.index}]" /><form:errors path="values[${status.index}]" /></div> 
</c:forEach>