Как отобразить глобальные ошибки формы в разных входах? - PullRequest
6 голосов
/ 17 марта 2012

У меня есть форма для регистрации:

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

Обратите внимание на два глобальных валидатора в последнем.Их следует выполнять только в том случае, если email не является пустым и имеет допустимый формат, а password не является пустым, поэтому я добавляю значение global.

Я хочу отобразить Email doesn't exist рядом с email inputи Password incorrect рядом с password входом, как это сделать в представлении?

В настоящее время я использую loginForm.globalError, но он покажет их оба рядом с одним входом.

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

Ответы [ 2 ]

6 голосов
/ 17 марта 2012

ИМХО, глобальная ошибка должна оставаться глобальной, поэтому я бы поставил ее выше ваших входных данных:

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

В противном случае вам придется сделать что-то вроде этого:

'_error -> loginForm.error("email").orElse(globalError)
1 голос
/ 17 марта 2012

Я думаю, что ограничение электронной почты должно быть определено в поле email, а не глобально.И думаю, что имеет смысл, чтобы ограничение пароля было глобальным, поскольку оно проверяет пару (электронная почта, пароль).

...