1

以下のブロックのように @valid を使用して、Spring アノテーション付き Bean を検証するのが好ましい方法のようですが、Spring アノテーションを使用して一度に 1 フィールドずつエラー メッセージを表示したいと考えています。各フィールドの後にフォーム全体を検証し、単一のフィールドのメッセージのみを表示できることは知っていますが、それは非効率的です。誰かがより良い方法を知っていますか?

    @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

Validator#validate最初の をヒットすると、メソッドから戻りErrorます。

このため

必要な順序でフィールドを検証することを制御できるカスタムValidator実装が必要ですが、アノテーションを使用すると、フォーム Bean のすべてのフィールドが検証され、すべてのフィールドに対して が返されます。org.springframework.validation.Validator@ValidBindingResult

于 2013-07-22T13:51:14.387 に答える
0

空/nullフィールドを持つエラーを除外することで物事を機能させることができました.これは機能しますが、最初のフィールドを気にしても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 に答える