1

別のフォームオブジェクトに含まれているフォームオブジェクトを検証したい。私はこのようなものを持っています:

@Controller
public class FormController {
    @RequestMapping(method = RequestMethod.POST)
    public void process(@ModelAttribute("form") @Valid FormObject formObject, 
                              BindingResult result) {
            ...
        @InitBinder("form")
        protected void initBinder(WebDataBinder binder) {
             binder.setValidator(customFormValidator);
        }
    }

public class FormObject {
    @Valid
    private FormObject2 formObject2;
}

// This is the class that needs to be validated.
public class FormObject2 {
    @NotEmpty
    private String name;
}
}

私が抱えている問題は、オブジェクトformObject2を別のカスタムバリデーター(「customFormValidator2」など)で検証したいのですが、登録方法が見つかりません。このようにすると、スプリングバリデーターが2番目のフォームを検証します。

customFormValidator内で2番目のフォームを検証しようとしましたが、2番目のフォームのエラーのパスが最初のフォームに相対的ではなく、jspページにエラーを表示できません。

他のフォーム内に2番目のフォームが必要になる可能性があるため、フォームオブジェクトをこのように構造化しました。これを行うことで、フォームオブジェクトをよりモジュール化できます。

私がやろうとしていることは可能ですか?より良い提案がありますか?

4

1 に答える 1

0

form Object2カスタムバリデーターを使用して、次のよう に検証できます

 public void process(@ModelAttribute("form") @Valid FormObject formObject, 
                              BindingResult result) {
customFormValidator2.validate(formObject.getFormObject2(), result);  
}  

そして削除@ValidしてJSR検証を削除します

public class FormObject {
 //   @Valid REMOVE THIS
     private FormObject2 formObject2;
}

また、次のようなネストされたクラスのパス属性を使用できます。

<form:input path="formObject2.any_property_name">  

エラーにも同じパスを問題なく使用できます。
詳細については、このリンクを確認してください。

于 2012-07-11T06:33:54.773 に答える