Tengo la siguiente situación. Tengo un validador para validar mi objeto de comando y establecer los errores en un objeto de errores para que se muestren en mi formulario. El validador se invoca como se espera y funciona bien, pero los errores que establezco en los objetos de Errores no se muestran cuando me vuelven a enviar a mi formulario debido a los errores de validación.Errores de validación de primavera no mostrados
Validador:
public void validate(Object obj, Errors err) {
MyCommand myCommand = (MyCommand) obj;
int index = 0;
for (Field field : myCommand.getFields()) {
if (field.isChecked()) {
if ((field.getValue() == null) || (field.getValue().equals(""))) {
err.rejectValue("fields[" + index + "].value", "errors.missing");
}
}
index++;
}
if (myCommand.getLimit() < 0) {
err.rejectValue("limit", "errors.invalid");
}
}
Comando:
public class MyCommand {
private List<Field> fields;
private int limit;
//getters and setters
}
public class Field {
private boolean checked;
private String name;
private String value;
//getters and setters
}
Forma:
<form:form id="myForm" method="POST" action="${url}" commandName="myCommand">
<c:forEach items="${myCommand.fields}" var="field" varStatus="status">
<form:checkbox path="fields[${status.index}].checked" value="${field.checked}" />
<c:out value="${field.name}" />
<form:input path="fields[${status.index}].value" />
<form:errors path="fields[${status.index}].value" cssClass="error" /></td>
<form:hidden path="fields[${status.index}].name" />
</c:forEach>
<fmt:message key="label.limit" />
<form:input path="limit" />
<form:errors path="limit" cssClass="error" />
</form:form>
controlador:
@RequestMapping(value = REQ_MAPPING, method = RequestMethod.POST)
public String onSubmit(Model model, MyCommand myCommand, BindingResult result) {
// validate
myCommandValidator.validate(myCommand, result);
if (result.hasErrors()) {
model.addAttribute("myCommand", myCommand);
return VIEW;
}
// form is okay, do stuff and redirect
}
¿Podría ser que las rutas que doy en el validador y la etiqueta no son correctas? El validador valida un objeto de comando que contiene una lista de objetos, por eso doy un índice en la lista en el objeto de comando al registrar un mensaje de error (por ejemplo: "campos [" + índice + "]". Valor). ¿O es que el objeto Errores que contiene los errores no está disponible para mi vista?
Cualquier ayuda es bienvenida y apreciada, podría darme una pista o me punto en la dirección correcta.
intenta agregar en el código del formulario para asegurar que su validador funciona ok –