フォームエラーをまとめて表示したい
Playframework2.1.1 のフォームに値をバインドし、エラーを表示する際に、エラーのみを一覧表示で取得したい場合がある。
その方法を探してみた。(そのまま今作ってるやつ)
val userCreateForm = Form( tuple( "account" -> nonEmptyText(6, 16).verifying(Messages("form.user.create.account.already.used"), constraint => !Login.exists(constraint)), "pass" -> nonEmptyText(5, 16), "pass2" -> nonEmptyText(5, 16), "accept" -> checked(Messages("form.user.create.accept.not_checked")) ) verifying(Messages("form.user.create.pass.not_match"), fields => fields match { case (ac, pas, pas2, accept) => { pas == pas2 } }) ) /* 利用箇所で */ def formError2String(formError:FormError)(implicit lang:Lang):String = { formError.key match { case null | "" => Messages(formError.message, formError.args:_*) case key => "%s : %s".format(key, Messages(formError.message, formError.args:_*)) } } userCreateForm.bindFromRequest().fold( hasErrors => hasErrors.errors.map(formError => formError2String(formError)).toList, success => /* 略 */
フォームにバインドした際のエラーは、Form 型の中の、errors フィールドに Seq[play.api.data.FormError] で入っていることが分かった。
play.api.data.FormError型はレンダリングに必要なキー、メッセージ、メッセージに埋め込む引数となっているので formError2String を定義してエラーを文字列に変換する。
これで、フォームエラーメッセージを一括で取得することができる。