2016-01-31 2 views
1

У меня нормальный play.api.data.Form в Play Framework 2.4. Я делаю базовую проверку в своем действии, но в моем случае, даже если пользовательские данные были синтаксически правильными, мне, возможно, придется добавлять ошибки в зависимости от результата от внешней службы.Вручную добавьте Seq [FormError] в форму в Play 2.4 (Scala)

Я получаю поле ошибок с помощью сообщений об ошибках из объекта 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) 
} 

Я знаю о методе withError от класса Form, но требуется только один аргумент FormError:

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

У меня такое чувство, что должно быть простое решение для этого (карта, для ...?), Но я не могу понять это.

val formWithErrors = ... 

Благодарим за помощь!

ответ

0

в действии, вместо:

MyForm.bindFromRequest.fold(// ... 

Keep например в виде 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) 
     // ... 
    } 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^