Play 2:如何在Scala控制器中解析表单输入的动态列表?

时间:2012-08-08 15:24:22

标签: scala playframework playframework-2.0

我有一个表单,其中输入字段的数量是动态的。

如何使用播放表格映射这些输入字段?假设每个输入标记的名称是'foo_x',其中x是一个整数,每当在客户端动态创建新的输入字段时,该整数就会递增。 Play中是否有自动映射可用,或者我必须“手动”执行此操作,如果可以,这样做怎么办?

2 个答案:

答案 0 :(得分:8)

正如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))
        }
    )

那里有相当多的事情发生,但我想要展示的重要一点是我在嵌套列表中使用可选的电子邮件,并验证列表中至少有一个非空元素 - 有效地迫使用户在列表中输入至少一个元素。

希望这有帮助。

答案 1 :(得分:5)

请参阅Play2 Documentation中的“重复值”。

如果遵循命名约定,您可以将这些映射到List中。