2012-03-17 32 views
6

Tôi có một biểu mẫu để đăng nhập:Làm thế nào để hiển thị các lỗi toàn cầu của một biểu mẫu trong các đầu vào khác nhau?

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

Lưu ý có hai trình xác thực toàn cầu cuối cùng. Chúng chỉ nên được thực hiện nếu email không trống và có định dạng hợp lệ và password không trống, vì vậy tôi đặt toàn cục vào.

Tôi muốn hiển thị Email doesn't exist bên cạnh email đầu vào và Password incorrect bên cạnh đầu vào password, cách thực hiện điều đó trong chế độ xem?

Hiện tại, tôi sử dụng loginForm.globalError, nhưng nó sẽ hiển thị cả hai bên cạnh một đầu vào.

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

Trả lời

6

IMHO, sai số toàn cầu nên ở toàn cầu, vì vậy tôi muốn đặt nó trên đầu vào của bạn:

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

Nếu không, bạn sẽ phải làm một cái gì đó như thế này:

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

Có, nó giúp mọi thứ trở nên dễ dàng! – Freewind

1

Tôi nghĩ rằng ràng buộc email phải được xác định trên trường email thay vì trên toàn cầu. Và nghĩ rằng nó có ý nghĩa đối với ràng buộc mật khẩu là toàn cầu vì nó kiểm tra cặp (email, mật khẩu).

+0

Tôi nghĩ rằng sự tồn tại của 'email' chỉ nên được kiểm tra khi email và mật khẩu đều được nhập vào và email có định dạng hợp lệ, vì vậy nó đặt nó ở chế độ toàn cục (và tôi giả định tất cả các trình xác thực thực hiện * không thành công *) – Freewind

Các vấn đề liên quan