我有一张表格:
<form:form commandName="command" method="post">
<form:errors path="property"/>
// some fields
</form:form>
和MultiActionController
Command command = new Command();
ServletRequestDataBinder binder = createBinder(request, command);
binder.bind(request);
for (Validator validator: getValidators())
if(validator.supports(command.getClass()))
validator.validate(command, binder.getBindingResult());
if(binder.getBindingResult().hasErrors())
// What to put here in order to show error message in <form:errors path="property"/>
我用过:
return new ModelAndView()
.addObject(binder.getBindingResult().getModel())
.addObject("command", command);
但它不起作用。当再次显示表单时(失败后),将显示命令属性,但不显示错误消息。
ANSWER
而不是
return new ModelAndView()
.addObject(binder.getBindingResult().getModel())
.addObject("command", command);
我必须致电
return new ModelAndView()
.addAllObjects(binder.getBindingResult().getModel());
注意 addAllObjects 。现在它工作正常!
答案 0 :(得分:1)
binder.getBindingResult()
是BindingResult的一个实例,它是Errors的子类。您的bind()
方法调用和验证程序生成的错误已添加到BindingResult
实例中。
如果其中一些恰好与property
路径相关联,您会在<form:errors>
的输出中看到它们,否则您将不会。当然,您可以遍历它们并使用相关路径重新添加它们但是重点是什么?