如何在play2中将2个验证器组合在一起?

时间:2012-03-16 15:35:44

标签: forms validation scala playframework-2.0

例如,我希望输入应为nonEmptyTextemail

如果用户未输入任何内容,则会显示错误消息The field is required,如果用户输入的电子邮件无效,则会显示Invalid email

但我发现,我可以使用一个:

val loginForm = Form("email"->nonEmptyText)

或:

val loginForm = Form("email"->email)

对于后者,如果用户没有输入,它仍会显示Invalid email,这不是我想要的。

UPDATE1

我尝试了Julien's answer

val loginForm = Form("email" -> (email verifying nonEmpty))

当用户输入任何内容时,错误消息将为:

Valid email required, This field is required

看起来像play将emailnonEmpty的两条错误消息组合在一起,但这不是我想要的。我希望当用户不输入时,该消息仅为:

This field is required

Valid email required, This field is required

UPDATE2

我发现显示组合错误的原因在helper.twitterBootstrapFieldConstructor.scala.html,有:

<span class="help-inline">@elements.errors(elements.lang).mkString(",")</span>

它将所有错误与,相结合。

就我而言,它应该是:

<span class="help-inline">@elements.errors(elements.lang).lastOption</span>

此处lastOption适用于nonEmpty

但我认为headOption更好,但是:

val loginForm = Form("email" -> (nonEmptyText verifying email))

不起作用 - email没有约束,所以我们必须为自己定义一个?

1 个答案:

答案 0 :(得分:2)

根据Form documentation,您可以使用verifying方法向映射添加约束。 Constraints object中已经定义了一些约束。所以你可以写:

val loginForm = Form("email" -> (email verifying nonEmpty))