2012-01-16 51 views
2

我試圖確認我的對象,它封裝了其他對象的列表,如下(縮短爲簡潔起見):春3 MVC驗證:指定用於驗證錯誤路徑列表

public class FormDTO { 
private List<AttributeDTO> ruleAttributes; 
// More attributes here 
} 

public class AttributeDTO { 
private String value; 
// More attributes here 
} 

的片斷我驗證如下:

for(AttributeDTO attributeDTO : attributes) 
{ 
    if(attributeDTO.getValue() == null || attributeDTO.getValue().length() == 0) 
    { 
     errors.reject("value", "value.isEmpty"); 
    } 
} 

我的JSP包含以下內容:

<c:forEach items="${form.ruleAttributes}" var="ruleAttribute" varStatus="counter"> 
    <tr> 
     <td> 
      <c:choose> 
       <c:when test="${ruleAttribute.isEditable}"> 
        <form:input path="ruleAttributes[${counter.index}].value" value="${ruleAttribute.value}"/> 
       </c:when> 
       <c:otherwise> 
        <span class="derived">NotEditable</span> 
       </c:otherwise> 
      </c:choose> 
     </td> 
     <td> 
      <form:errors path="ruleAttributes[${counter.index}].value"/> 
     </td> 
    </tr> 
</c:forEach> 

如何獲取相關列表項目的相應錯誤消息?總之,我希望「value.isEmpty」消息出現在具有空值的相關行的表格單元格中。

謝謝

回答

3

再次閱讀Spring參考指南後,我可以自己回答這個問題。

要得到相應的錯誤出現此片段...

<form:errors path="ruleAttributes[${counter.index}].value"/> 

...我需要修改我的驗證代碼如下:

for(int i = 0; i < ruleAttributes.size(); i++) 
{ 
AttributeDTO attributeDTO = ruleAttributes.get(i); 

if(attributeDTO.getValue() == null || attributeDTO.getValue().length() == 0) 
{ 
     errors.rejectValue("ruleAttributes[" + i + "].value", "value.isEmpty", "Value should not be empty"); 
} 

}