2

任意のクラスの日付フィールドを検証するバリデーターを作成しました。コントローラーでそのインスタンスを自動配線し、コントローラーのメソッドで validate() を呼び出しました。すべてが正常に機能しています。

@RequestMapping(value = "/{pan}",method=RequestMethod.POST)
public ModelAndView submitIfPANpresents(@ModelAttribute("command") @Valid  PortfolioBean portfolio,bindingResult result){
    dateValidator.validate(portfolio, result);
    if(result.hasErrors()){
        System.out.println(result.getErrorCount());
        return new ModelAndView("portfolioview");
    }
:
}

ここで、カスタム バリデーターを WebDataBinder にバインドするメソッドをコントローラーに作成しました。これは、validate() を明示的に呼び出す必要がないことを期待して行いました。

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.setValidator(dateValidator);
}

それでもすべて正常に動作しています。

ここで、コントローラのメソッドからカスタム バリデータの validate() の呼び出しをコメントし、コードをテストしました。カスタムバリデータからのみ設定されたエラーを確認できます。Spring の内部検証が機能しなくなります。

私がしていること、またはしていないことは何ですか?私の必要性は、validate() を明示的に呼び出すのではなく、xml からバリデーターを追加のバリデーターとしてバインドすることです。

4

1 に答える 1

2

そうするときはbinder.setValidator(dateValidator);、Spring のバリデーターを自分の に置き換えますdateValidator。そのため、Spring の内部検証が機能しなくなります。

したがって、両方のバリデーターを機能させたい場合は、この行を削除して保持する必要がありますdateValidator.validate(...)。追加のバリデーターが必要な場合は、選択の余地がありません。

于 2012-12-02T12:09:30.370 に答える