入力フィールドの数が動的であるフォームがあります。
これらの入力フィールドをプレイフォームにどのようにマッピングできますか?たとえば、各入力タグの名前は「foo_x」です。ここで、xは、クライアント側で新しい入力フィールドが動的に作成されるたびにインクリメントされる整数です。Playで利用可能な自動マッピングはありますか、それとも「手動で」これを行う必要がありますか?もしそうなら、これはどのように行うことができますか?
入力フィールドの数が動的であるフォームがあります。
これらの入力フィールドをプレイフォームにどのようにマッピングできますか?たとえば、各入力タグの名前は「foo_x」です。ここで、xは、クライアント側で新しい入力フィールドが動的に作成されるたびにインクリメントされる整数です。Playで利用可能な自動マッピングはありますか、それとも「手動で」これを行う必要がありますか?もしそうなら、これはどのように行うことができますか?
ブライアンが述べたように、Playのドキュメントには、ニーズに合うはずの繰り返し値の例があります。
また、マッピング定義をネストできることにも注意してください。例として、私は次のようなものを持っています:
val editUserForm: Form[User] = Form(
mapping(
"username" -> text(minLength = 4, maxLength = 50),
"emails" -> list(optional(email)).verifying(Messages("error.mandatoryEmail"), e => e.size > 0),
"urls" -> list(text(maxLength = 255)),
{
// Binding: Create a User from the mapping result
(username, emails, urls) => {
// Here, emails is a List[Option[String]]
// and urls is a List[String]
}
} {
// Unbinding: Create the mapping values from an existing User value
user => Some(user.username,
user.emails.map(e => Some(e.email)),
user.urls.map(_.url))
}
)
そこではかなりのことが起こっていますが、私が示したかった重要な点は、オプションのリストを電子メールでネストし、リストに少なくとも1つの空でない要素が含まれていることを確認することです-事実上、ユーザーに少なくともリスト内の1つの要素。
お役に立てれば。
Play2ドキュメントの「繰り返される値」を参照してください。
命名規則に従えば、これらを自動的にリストにマップすることができます。