1

似乎验证 Spring 注释 bean 的首选方法是使用 @valid,就像在下面的块中一样,但是我想一次显示一个字段的错误消息,仍然使用 Spring 注释。我知道我可以在每个字段之后验证整个表单并只显示单个字段的消息,但这效率低下,有人知道更好的方法吗?

    @RequestMapping(value="/register",method=RequestMethod.POST)
public @ResponseBody RegisterResponse registerSubmit(@Valid @ModelAttribute("registerData") Register registerData, BindingResult result ){

    RegisterResponse rr= new RegisterResponse();
    if(!result.hasErrors()) {
         rr.setStatus("SUCCESS");
         rr.setResult(result);
    }
    else {
         rr.setStatus("FAIL");
         rr.setResult(result.getAllErrors());
    }
    return rr;

}
4

2 回答 2

0

我能够通过过滤掉具有空/空字段的错误来使事情正常进行,这确实有效,但效率有点低,因为即使我们关心第一个字段,我们也会验证整个 bean。我很想听听一种更好的方法来完成这种逐步的表单字段验证。我使用了以下内容:

    private List<ObjectError> removeEmpties(BindingResult result) {
    List<ObjectError> errors = result.getAllErrors();

    ArrayList<ObjectError> myErrors = new ArrayList<ObjectError>();

    for(ObjectError error: errors){

        FieldError realThing = (FieldError) error; 
        if (realThing.getRejectedValue()!=null && !realThing.getRejectedValue().toString().isEmpty()){
            myErrors.add(error);
        }
    }
    return myErrors;
}
于 2013-07-24T04:58:13.287 回答
0

Validator#validate击中第一个时从该方法返回Error

为了这

您需要有一个自定义Validator实现org.springframework.validation.Validator,您可以控制按您需要的顺序验证字段,而使用@Valid注释将验证您的 Form Bean 中的所有字段并返回BindingResult所有字段。

于 2013-07-22T13:51:14.387 回答