子クラスのリストを持ったformのバリデーションのやり方があまりweb上に出てなかったのでメモ。
結論としては子クラスのリストに@Valid
アノテーション付けるだけだった。
Parent.java
public class Parent {
public int id;
@Valid
public List<Child> child;
}
Child.java
public class Child{
@Required(message = "名前を入力してください。")
public String name;
@MaxLength(value = 10, message = "10文字まで")
public String memo;
}
HogeController.java
public Result hoge() {
Form<Parent> parent_form = form(Parent.class).bindFromRequest();
if (parent_form.hasErrors()) {
// 子クラスのバリデーションも入ってる。
return badRequest(views.html.hoge.create.render(parent_form));
}
return redirect("url");
}
多分、素直に作成してれば問題なかったんだけどCMSみたいなシステムを作ってたので表示制御用のプロパティをformのクラスに持ってたのがいけなかった。
注意点としてはformのプロパティは全て送信して受け取れるようにしておくこと。
if文で使うためだけのプロパティとかを送信してなかったのでbadRequest
時の再描画でエラーになってた。
とりあえず全てのプロパティをhiddenで持つようにしたら問題なく動きました。