Spring 3 MVC Validation: указание пути для ошибки проверки в списке - PullRequest
2 голосов
/ 17 января 2012

Я пытаюсь проверить свой объект, который инкапсулирует список других объектов, следующим образом (сокращенно для краткости):

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" появилось в ячейке таблицы для соответствующей строки, которая имеет пустое значение.

Спасибо

1 Ответ

3 голосов
/ 17 января 2012

После прочтения справочного руководства по Spring я сам могу ответить на этот вопрос.

Чтобы отобразить соответствующую ошибку для этого фрагмента ...

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

... Iмне нужно изменить мой код проверки следующим образом:

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");
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...