2012-03-17 5 views
6

Tengo un formulario para el registro:¿Cómo mostrar los errores globales de un formulario en diferentes entradas?

val loginForm = Form(tuple(
    "email" -> (nonEmptyText verifying email.constraints.head), 
    "password" -> nonEmptyText 
) 
    .verifying("Email doesn't exist", params => User.findByEmail(params._1) != None) 
    .verifying("Password incorrect", params => 
     User.findByEmail(params._1).map(_.checkPassword(params._2)) == Some(true)) 
) 

cuenta de que hay dos validadores globales en el pasado. Deben realizarse solo si email no está vacío y tiene un formato válido, y password no está vacío, así que puse el en global.

Quiero mostrar Email doesn't exist lado email entrada y Password incorrectpassword lado de entrada, cómo hacerlo en vista?

En este momento, uso loginForm.globalError, pero se mostrarán ambos junto a una entrada.

@inputText(loginForm("email"), '_label->"Email:", 
    '_error->loginForm.globalError 
) 
@inputPassword(loginForm("password"), '_label->"Password:") 

Respuesta

6

en mi humilde opinión, el error global debería mantenerse mundial, por lo que lo pondría por encima de sus entradas:

@loginForm.globalError.map { error => 
    <div>@error</div> 
} 
@inputText(loginForm("email"), '_label->"Email:") 
@inputPassword(loginForm("password"), '_label->"Password:") 

De lo contrario, tendríamos que hacer algo como esto:

'_error -> loginForm.error("email").orElse(globalError) 
+0

Sí, ¡hace las cosas más fáciles! – Freewind

1

Creo que la restricción del correo electrónico debe definirse en el campo email en lugar de a nivel mundial. Y cree que tiene sentido que la restricción de contraseña sea global, ya que verifica el par (correo electrónico, contraseña).

+0

Creo que la existencia del 'correo electrónico' solo debe verificarse cuando el correo electrónico y la contraseña se ingresan y el correo electrónico tiene un formato válido, por lo que se coloca en global (y supongo que todos los validadores realizan * fail-on-first *) – Freewind

Cuestiones relacionadas