我遇到了Spring MVC的一个奇怪问题(最新版本,4.0.6)。 在提交表单之前尝试验证表单时,我能够进行验证并填充给定的Spring Form(为了清晰起见而截断)
<form:form method="post" commandName="contratto">
<form:errors path="*" cssClass="alert alert-error" element="div" />
</form:form>
问题是Spring 格式化程序根本没有被调用,因此给了我未定位的日期和数字。
@RequestMapping(value = "/edit/{contractId}", method = RequestMethod.GET)
public String edit_form(@PathVariable("contractId") int id, ModelMap model) throws Exception {
Contratti contratto = ejbRepository.getContratto(id);
model.addAttribute("contratto", contratto);
BindingResult result = new BeanPropertyBindingResult(contratto, "contratto");
new CustomContrattoValidator().validate(contratto, result);
if (result.hasErrors()) {
model.addAllAttributes(result.getModel());
}
return "contratti/form/edit";
}
通过使用经典方法,如注释Display JSR-303 errors before form submission with Spring MVC或@Valid and Binding Result for Data from DB或Spring - adding BindingResult to newly created model attribute中所述的处理程序方法,问题更严重,因为
new CustomContrattoValidator().validate(contratto, result);
似乎报告所有缺少的字段(例如,如果对象完全为空,即使代码完全相同,我从DB获取它。)
我完全迷失了,无法理解。
感谢任何建议!
答案 0 :(得分:2)
您需要在BeanPropertyBindingResult中设置转换服务。
获取转换服务:
@Autowired private ConversionService conversionService;
传递它:
BindingResult result = new BeanPropertyBindingResult(contratto, "contratto");
result.initConversion(conversionService);