Play Framework - 为 flash 消息转换表单错误

Play Framework - convert form errors for flash messaging

我想转换表单错误以将它们传递给即显消息。我该怎么做?

这是我要转换它们的代码:

newDb.fold(
    hasErrors = { form =>
      // here I want to translate errors to string for Flash messaging
      Redirect(routes.Application.index).flashing("error" -> Messages("msg.new.validation.errors"))
    },
    success = { dbToInsert =>
      MyDatabases.insert(dbToInsert)
      val message = Messages("msg.new.success", dbToInsert.name)
      Redirect(routes.Application.index).flashing("success" -> message)
    }
  )

谢谢

如何转换它们当然取决于您想要它们的格式,但您可以在 hasErrors 表单实例的 Form.errors 中找到它们。 Form.errorsFormError 的序列,其中每个序列都有导致错误的字段 keymessages 是错误消息 I18N 键或实际消息,并且 args 这是要插入到消息中的值。

要将它们转换为人类可读的字符串,您可以看看 views.html.helper.FieldElements.errors 方法中的播放模板表单助手是如何完成的:https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/views/helper/Helpers.scala#L26

尝试这样的事情:

def convert(text: String, messages: Seq[FormError]): String =
  """<div class="alert" role="alert">""" + text + formatMessages(messages) + "</div>"

private def formatMessages(messages: Seq[FormError]): String = {
    if(messages.size > 0){ 
      "<ul>" + messages.foldLeft("")((res,message) => res + "<li>" + message.message + "</li>") + "</ul>"
    } else ""
}

然后按如下方式使用您的闪烁消息:

@Html(flash.get("error").getOrElse("Welcome!"))

然后像往常一样用 CSS 设置消息的样式。您可以使用此 convert 方法通过将 class 添加到 div 标记来创建具有不同颜色的成功和错误闪烁。