提交前的Spring验证(Method.GET)

时间:2014-07-16 15:41:09

标签: java forms spring validation spring-mvc

我遇到了Spring MVC的一个奇怪问题(最新版本,4.0.6)。 在提交表单之前尝试验证表单时,我能够进行验证并填充给定的Spring Form(为了清晰起见而截断)

<form:form method="post" commandName="contratto">
    <form:errors path="*" cssClass="alert alert-error" element="div" />
</form:form>

enter image description here

问题是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 DBSpring - adding BindingResult to newly created model attribute中所述的处理程序方法,问题更严重,因为

new CustomContrattoValidator().validate(contratto, result);

似乎报告所有缺少的字段(例如,如果对象完全为空,即使代码完全相同,我从DB获取它。)

我完全迷失了,无法理解。

感谢任何建议!

1 个答案:

答案 0 :(得分:2)

您需要在BeanPropertyBindingResult中设置转换服务。

获取转换服务:

@Autowired private ConversionService conversionService;

传递它:

BindingResult result = new BeanPropertyBindingResult(contratto, "contratto");
result.initConversion(conversionService);