2012-03-17 31 views
6

我有記錄的一種形式:如何在不同的輸入中顯示錶單的全局錯誤?

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

回答

6

恕我直言,全球誤差應保持全球性的,所以我把它上面的輸入:

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

否則你不得不做這樣的事情:

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

是的,它讓事情變得簡單! – Freewind 2012-03-18 02:05:34

1

我認爲應該在email字段上定義電子郵件約束,而不是全局。並認爲它是有道理的密碼約束是全球性的,因爲它檢查對(電子郵件,密碼)。

+0

我認爲只有在輸入電子郵件和密碼並且電子郵件具有有效格式時才應該檢查是否存在'email',因此它將它放在全局中(並且我假設所有驗證器都執行* fail-on-first *) – Freewind 2012-03-18 02:04:48

相關問題