如何在不同的输入中显示表单的全局错误?

时间:2012-03-17 14:18:41

标签: forms validation playframework-2.0

我有一个记录表单:

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不为空时才应执行它们,因此我将其置于全局。

我想在Email doesn't exist输入旁边显示email,在Password incorrect输入旁边显示password,如何在视野中显示?

目前,我使用loginForm.globalError,但它会在一个输入旁边显示它们。

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

2 个答案:

答案 0 :(得分:6)

恕我直言,全局错误应该保持全球性,所以我把它放在你的输入之上:

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

否则你必须做这样的事情:

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

答案 1 :(得分:1)

我认为电子邮件约束应该在email字段上定义,而不是全局定义。并且认为密码约束是全局的,因为它检查对(电子邮件,密码)。