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

时间:2015-03-16 06:28:25

标签: scala playframework

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

以下是我想要转换它们的代码:

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

谢谢

2 个答案:

答案 0 :(得分:1)

尝试这样的事情:

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方法通过向div标记添加类来创建具有不同颜色的成功和错误闪烁。

答案 1 :(得分:0)

如何转换它们取决于您希望它们采用何种格式,但您可以在Form.errors表单实例的hasErrors中找到它们。 Form.errorsFormError的序列,其中每个key都有导致错误的字段messagesargs即错误消息I18N密钥或实际消息views.html.helper.FieldElements.errors 1}}这是插入到消息中的值。

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