freemarkerを使用した最新のSpringMVC。
誰かが春のMVCでフォームを検証するという点で私のオプションが何であるか、そしてこれを行うための推奨される方法を教えてくれることを願っています。
モデルに直接マップしないフォームがあります。入力フィールドがあり、投稿時に2つのモデルオブジェクトを初期化するために使用します。これらのオブジェクトを検証し、合格した場合は保存します。
失敗した場合は、フォームに戻り、ユーザーが入力した値を事前に入力して、エラーメッセージを表示します。
私はあちこちで約2つの方法を読みましたが、そのうちの1つを実行して、それがどのように機能するかを理解しました。
@RequestMapping(...., method = RequestMethod.POST)
public ModelAndView myMethod(@Valid MyModel, BindingResult bindingResult) {
ModelAndView mav = new ModelAndView("some/view");
mav.addObject("mymodel", myModel);
if(bindingResult.hasErrors()) {
return mav;
}
}
これは、フォームがフォームに直接マップされている場合に機能しましたが、私の状況では次のようになります。
特定のモデルにマップされないフォームフィールドには、2つのモデルのいくつかのプロパティがあります。
検証が行われる前に、2つのモデルを手動で作成し、フォームから値を設定し、いくつかのプロパティも手動で設定する必要があります。
両方のモデル(model1、model2)でvalidateを呼び出し、これらのエラーメッセージをエラーコレクションに追加します。これが機能しない場合は、同じビューページに戻す必要があります。
フォームが投稿されたら、データベース呼び出しを行う必要があり、それらの結果に基づいて、エラーコレクションにメッセージを追加する必要がある場合があります。
誰かがこの種の検証を行う方法を教えてもらえますか?
以下の擬似コード:
Model1 model1 = new Model1();
Model2 model2 = new Model2();
// manually or somehow automatically set the posted form values to model1 and model2.
// set some fields manually, not from posted form
model1.setProperty10(GlobalSettings.getDefaultProperty10());
model2.setProperty11(GlobalSettings.getDefaultProperty11());
// db calls, if they fail, add to errors collection
if(bindingResult.hasErrors()) {
return mav;
}
// validation passed, save
Model1Service.save(model1);
Model2Service.save(model2);
redirect to another view
アップデート
現在、モデルでJSR 303アノテーションを使用していますが、それでも使用できると便利です。
アップデートII
私が探しているものの要約については、以下の報奨金の説明をお読みください。