7

如何在 Play 框架 2 中的字段构造函数之外显示表单字段的验证错误?这是我尝试过的:

@eventForm.("name").error.message

我得到这个错误:

value message is not a member of Option[play.api.data.FormError]

我很困惑,因为在api 文档中它说 message 是 FormError 的成员。这也适用于全局错误:

@eventForm.globalError.message
4

2 回答 2

7

您可以在此处查看 Form 的源代码来更好地掌握它

Form定义一个应用方法:

 def apply(key: String): Field = Field(
    this,
    key,
    constraints.get(key).getOrElse(Nil),
    formats.get(key),
    errors.collect { case e if e.key == key => e },
    data.get(key))

正如文档中所说,即使它不存在,它也会返回任何字段。并且 aField有一个errors返回 a 的成员Seq[FormError]

所以,你可以做这样的事情(对于Seq[FormError]):

eventForm("name").errors.foreach { error =>
  <div>@error.message</div>
}

或者(对于Option[FormError]

eventForm("name").error.map { error =>
  <div>@error.message</div>
}

或者,您可以使用Form errors

  def errors(key: String): Seq[FormError] = errors.filter(_.key == key)

并获取给定键的所有错误。像这样(对于Seq[FormError]):

eventForm.errors("name").foreach { error =>
      <div>@error.message</div>
}

或者(对于Option[FormError]

eventForm.error("name").map { error =>
          <div>@error.message</div>
}

如果您想了解更多详细信息,请查看源代码。它写得很好,评论也很好。

干杯!

编辑:

正如 biesior 评论的那样:要使用不同的语言显示人类可读的漂亮消息,您必须检查 play 是如何工作的 I18N 在这里

为了彻底,你可能不得不处理 I18N。让这一切正常工作一点也不难。阅读文档后,您可能仍会感到有些困惑。我会给你一点推动力。将文件添加messages到您的文件夹,您可以从此处conf复制其内容。这样您就可以更好地控制默认消息。现在,在您看来,您应该能够执行以下操作:

eventForm.errors("name").foreach { error =>
          <div>@Messages(error.message, error.args: _*)</div>
}

例如,如果它会显示先前在文件error.message中定义的消息。定义您的错误消息可能处理的一些参数。例如,如果您正在处理,则 an可能是所需的最小值。在您的消息中,您只需要遵循模式,其中 n 是您的论点的顺序。error.invalidconf/messagesInvalid valueargserror.minarg{n}

当然,您可以像这样定义自己的消息:

error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler!

在您的控制器中,您可以像这样检查您的表单(只需一行代码即可向您展示它的感觉)

"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year

如果您想使用语言,只需按照文档进行操作。

干杯,再一次!

于 2012-12-22T19:19:39.253 回答
3

正如你自己所说,message是 的成员FormError,但你有一个Option[FormError]. 你可以使用

eventForm("name").error.map(_.message).getOrElse("")

这会给你消息,如果有错误,""如果没有。

于 2012-12-22T18:30:46.187 回答