Ich habe die folgende Situation. Ich habe einen Validator, um mein Befehlsobjekt zu validieren und die Fehler für ein Errors-Objekt festzulegen, das in meinem Formular angezeigt werden soll. Der Validator wird wie erwartet aufgerufen und funktioniert ordnungsgemäß, aber die Fehler, die ich für die Errors-Objekte festgelegt habe, werden nicht angezeigt, wenn ich aufgrund der Validierungsfehler an mein Formular zurückgesendet werde.Spring Validierung Fehler nicht angezeigt
Validator:
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");
}
}
Befehl:
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
}
Form:
<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>
Controller:
@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
}
Könnte es sein, dass die Pfade, die ich im Validator und Tag gebe, nicht korrekt sind? Der Validator validiert ein Befehlsobjekt, das eine Liste von Objekten enthält. Aus diesem Grund gebe ich bei der Registrierung einer Fehlermeldung einen Index für die Liste im Befehlsobjekt an (Beispiel: "fields [" + index + "]". Value). Oder ist das Errors-Objekt, das die Fehler enthält, für meine Ansicht nicht verfügbar?
Jede Hilfe ist willkommen und geschätzt, es könnte mir einen Hinweis oder zeigen Sie mir in die richtige Richtung.
try hinzufügen in ihrem form code um sicherzustellen, dass ihr validator funktioniert ok –