【问题标题】:Manually add Seq[FormError] to a Form in Play 2.4 (Scala)在 Play 2.4 (Scala) 中手动将 Seq[FormError] 添加到表单
【发布时间】:2016-01-31 19:04:37
【问题描述】:

我在 Play Framework 2.4 中有一个普通的play.api.data.Form。我在 Action 中进行了基本验证,但在我的情况下,即使用户提交的数据在语法上是正确的,我也可能需要根据外部服务的结果添加错误。

我从 JSON 对象中获取带有错误消息的错误字段,例如:

{
    "name": [
        "Invalid name"
    ],
    "age": [
        "Invalid age",
        "Something else"
    ]
}

我可以把这个 JSON 对象转换成Seq[FormError]

val fields: Seq[(String, JsValue)] = jsObjErrorFields.fields
val formErrors: Seq[FormError] = fields map { case(key, jsValue) =>
    val messages: Seq[String] = jsValue.asOpt[Seq[String]] getOrElse Seq()
    FormError(key, messages)
}

我知道Form 类的withError 方法,但它只需要一个FormError 参数:

def withError(error: FormError): Form[T] = this.copy(errors = errors :+ error, value = None)

我觉得必须有一个简单的解决方案(地图,用于...?),但我无法弄清楚。

val formWithErrors = ...

感谢您的帮助!

【问题讨论】:

    标签: scala playframework playframework-2.4


    【解决方案1】:

    在行动中,而不是:

    MyForm.bindFromRequest.fold( // ...
    

    将表单实例保存在val 然后fold

    val form = MyForm.bindFromRequest
    form.fold( // ...
        formWithErrors => { /* ... */ },
        data => {
            // ...
            // Copy the form and apply the errors from JSON:
            val formWithErrors = form.copy(errors = formErrors)
            // ...
        }
    )
    

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多