我有一个表单,其中输入字段的数量是动态的。
这些输入字段如何映射到播放表单?假设每个输入标签的名称是“foo_x”,其中 x 是一个整数,每次在客户端动态创建一个新的输入字段时它都会递增。Play 中是否有任何自动映射可用,或者我必须“手动”执行此操作,如果有,如何完成?
我有一个表单,其中输入字段的数量是动态的。
这些输入字段如何映射到播放表单?假设每个输入标签的名称是“foo_x”,其中 x 是一个整数,每次在客户端动态创建一个新的输入字段时它都会递增。Play 中是否有任何自动映射可用,或者我必须“手动”执行此操作,如果有,如何完成?
正如 Brian 提到的,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))
}
)
那里发生了很多事情,但我想展示的重要一点是,我正在嵌套带有可选电子邮件的列表,并验证列表至少有一个非空元素 - 有效地强制用户至少输入列表中的一个元素。
希望这可以帮助。
请参阅Play2 文档中的“重复值” 。
只要您遵循命名约定,您就可以将它们自动映射到列表中。