0

Spring 3にバリデーターがあります

Class X implements Validator{
   public void validate(Object object, Errors errors) {

//Implementation 1
}
}

Class Y implements Validator{
   public void validate(Object object, Errors errors) {

//Implementation 2
}
}

ここで、実装 1 を使用していくつかの状況 (リクエスト マッピング 1 の可能性があります) に基づいてモデルを検証し、他のケース (リクエスト マッピング 2) で実装 2 を使用したいと考えています。

Spring 3でこれを達成するにはどうすればよいですか

これはバインダー

@InitBinder
    protected void initBinder(WebDataBinder binder) {
        if (binder.getTarget() instanceof X) {
            binder.setValidator(new X());
        } 
    }

@RequestMapping("/Implementation1.html)
public String one(@Valid X x){
return "pg1";//I want 1st implementation of validator
}

@RequestMapping("/Implementation2.html)
public String one(@Valid X x){
return "pg2"; //I want 2nd implementation of validator
}
4

1 に答える 1

0

@Valid アノテーションを使用して Bean を検証する spring mvc の構成を行いました。そこに助けを求めることができます。https://github.com/andonescu/springmvc-freemarker/tree/spring-3.2v

** Spring MVC を構成している場合<mvc:annotation-driven/>、JSR 303 バリデーターが自動的に構成されます

  • まず第一に、私の意見では、検証したいオブジェクトは Validator インターフェイスを実装する必要はありません。これらのクラスは、最も単純なケースでのみSerializableを実装する必要があります。

  • 次に、検証したいそのクラスのフィールドに注釈を付けることができます-制約付き-jsr 303の例で使用される注釈はこちら

  • 3番目に、コントローラーでクラスを使用する場合、クラスがメソッドのパラメーターとして追加された後、 BindingResult bindingResultそのバインディング結果を使用して、そのオブジェクトにエラーがあるかどうかを確認できます。例はこちら

    @RequestMapping("/Implementation1.html) public String one(@Valid X x, BindingResult bindingResult){ return "pg1";//バリデーターの最初の実装が欲しい }

于 2013-01-16T14:47:35.190 に答える