如何设置选项值以在Play 2中形成映射?

时间:2014-01-16 05:14:13

标签: scala playframework-2.0

我想将Option值映射到表单但不会被忽略。 例如:

case class Message(Id: Option[Int], name: String, description: Option[String])

val messageForm: Form[Message] = Form(
  mapping(
    "id"          -> ignored(Option(0)),
    "name"        -> nonEmptyText(minLength = 4, maxLength = 140),
    "description" -> text
)(Message.apply)(Message.unapply))
          ^

type mismatch;
found   : (Option[Int], String, Option[String]) => Message
required: (Option[Int], String, String)         => ?

忽略“id”值使用成功,但“text”会因应用函数而产生错误。 怎么做得比?我需要为Option [String]编写自定义表单约束吗?

1 个答案:

答案 0 :(得分:8)

您可以使用Mapping[String]方法将Mapping[Optional[String]]转换为optional,如下所示:

val messageForm: Form[Message] = Form(
  mapping(
    "id"          -> ignored[Option[Int]](None),
    "name"        -> nonEmptyText(minLength = 4, maxLength = 140),
    "description" -> optional(text)
)(Message.apply)(Message.unapply))

请注意,您可以使用None表示id字段中没有值。