Tôi có tình huống sau. Tôi có một trình xác nhận hợp lệ để xác thực đối tượng lệnh của tôi và thiết lập các lỗi trên một đối tượng Lỗi được hiển thị trong biểu mẫu của tôi. Trình xác thực được gọi như mong đợi và hoạt động tốt, nhưng các lỗi tôi đặt trên các đối tượng Lỗi không được hiển thị, khi tôi được gửi trở lại biểu mẫu của tôi do lỗi xác thực.Lỗi xác thực mùa xuân không được hiển thị
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");
}
}
Command:
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
}
Mẫu:
<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>
Bộ điều khiển:
@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
}
Có thể là các đường dẫn mà tôi cung cấp trong trình xác thực và thẻ không chính xác không? Trình xác nhận hợp lệ hóa một đối tượng lệnh có chứa một danh sách các đối tượng, vì vậy đó là lý do tại sao tôi đưa ra một chỉ mục trong danh sách trong đối tượng lệnh khi đăng ký một thông báo lỗi (ví dụ: "fields [" + index + "]". Value). Hoặc có phải là đối tượng Lỗi chứa lỗi không có sẵn cho chế độ xem của tôi không?
Bất kỳ trợ giúp nào được chào đón và đánh giá cao, nó có thể cho tôi gợi ý hoặc chỉ cho tôi đúng hướng.
thử thêm trong mã biểu mẫu của bạn để đảm bảo trình xác thực của bạn hoạt động ok –