Я пересматриваю страницу в своем приложении и пытаюсь выполнить рекурсивную проверку на объекте, который сам имеет ограничения проверки. Однако, что происходит, я получаю ошибку, описывающую объект недействительным. Я бы хотел, чтобы ошибки проверки вложенного объекта возвращались на страницу.SpringValidator (net.sf.oval): Рекурсивная отчетность об ошибках
ConsumerManagementController.java
@Controller
@SessionAttributes(ConsumerManagementController.CMD_NAME)
public class ConsumerManagementController {
private org.springframework.validation.Validator validator;
public ConsumerManagementController() {
validator = new net.sf.oval.integration.spring.SpringValidator.SpringValidator(new net.sf.oval.Validator());
}
@RequestMapping(value = FORM_VIEW, method = RequestMethod.POST)
protected ModelAndView processAdjustment(HttpServletRequest request,
Model model,
@ModelAttribute(CMD_NAME) ConsumerManagementCommand cmd,
BindingResult errors) throws Exception {
...
// Validating the ConsumerManagementCommand object
validator.validate(cmd, errors);
// RESULT
// org.springframework.validation.BeanPropertyBindingResult: 1 errors
// Field error in object 'cmc' on field 'consumerAdjustment': rejected value [[com.company.core.dto.ConsumerAdjustment - memo=, -- ]]; codes [net.sf.oval.constraint.AssertValid.cmc.consumerAdjustment,net.sf.oval.constraint.AssertValid.consumerAdjustment,net.sf.oval.constraint.AssertValid.com.company.core.dto.ConsumerAdjustment,net.sf.oval.constraint.AssertValid]; arguments []; default message [com.company.web.ops.commands.consumer.account.ConsumerManagementCommand.consumerAdjustment is invalid]
// Validating the ConsumerAdjustment object
ConsumerAdjustment consumerAdjustment = cmd.getConsumerAdjustment();
BeanPropertyBindingResult consumerAdjustmentErrors = new BeanPropertyBindingResult(consumerAdjustment, "consumerAdjustment");
validator.validate(consumerAdjustment, consumerAdjustmentErrors);
// RESULT
// org.springframework.validation.BeanPropertyBindingResult: 2 errors
// Field error in object 'consumerAdjustment' on field 'memo': rejected value []; codes [consumerAdjustment.memo.err.null.consumerAdjustment.memo,consumerAdjustment.memo.err.null.memo,consumerAdjustment.memo.err.null.java.lang.String,consumerAdjustment.memo.err.null]; arguments []; default message [com.company.core.dto.ConsumerAdjustment.memo cannot be empty]
...
}
}
ConsumerManagementCommand.java
@Guarded
public class ConsumerManagementCommand implements Serializable{
@AssertValid
private ConsumerAdjustment consumerAdjustment = new ConsumerAdjustment();
}
ConsumerAdjustment.java
public class ConsumerAdjustment extends AbstractDTO implements Serializable {
@NotNull(errorCode = ERR_MEMO_NULL)
@NotEmpty(errorCode = ERR_MEMO_NULL)
@Length(max = 500, errorCode = ERR_MEMO_LENGTH)
private String memo;
}
См РЕЗУЛЬТАТ комментарии ConsumerManagementController для сообщения об ошибках.