10

我了解如何在 Play 2 中添加简单的表单验证,例如nonEmptyText,但我将如何实现更复杂的验证,例如“必须定义至少一个字段”?目前,如果我的模型对象被所有Nones 初始化,我会在它中抛出一个异常,但这会产生一个令人讨厌的错误消息。我希望在表单页面上收到一条友好的错误消息。

4

3 回答 3

9

您可以在表单定义中嵌套mappings/并在映射、子映射、元组和子元组上添加规则。然后在您的模板中,您可以使用特定字段或一组字段检索错误。tuplesverifyingform.errors("fieldname")

例如 :

val signinForm: Form[Account] = Form(
    mapping(
        "name" -> text(minLength=6, maxLength=50),
        "email" -> email,
        "password" -> tuple(
            "main" -> text(minLength=8, maxLength=16),
            "confirm" -> text
        ).verifying(
            // Add an additional constraint: both passwords must match
            "Passwords don't match", password => password._1 == password._2
        )
    )(Account.apply)(Account.unapply)
)

如果您有两个不同的密码,则可以使用以下方法检索模板中的错误form.errors("password")

在此示例中,您必须自己编写Account.applyAccount.unapply处理(String, String, (String, String))

于 2012-05-11T19:41:43.847 回答
7

我已经改进了@kheraud 接受的答案。您可以获取元组并将其转换回单个字符串。这允许您使用默认的应用/取消应用功能。

例子 :

val signinForm: Form[Account] = Form(
    mapping(
        "name" -> text(minLength=6, maxLength=50),
        "email" -> email,
        "password" -> tuple(
            "main" -> text(minLength=8, maxLength=16),
            "confirm" -> text
        ).verifying(
            // Add an additional constraint: both passwords must match
            "Passwords don't match", password => password._1 == password._2
        ).transform(
            { case (main, confirm) => main },
            (main: String) => ("", "")
        )
    )(Account.apply)(Account.unapply)
)
于 2013-01-09T19:56:13.973 回答
0

在玩!框架,您可以通过使用 flash 变量显示友好的错误消息。你只需要写一些类似的东西;

flash.error("Oops. An error occurred");

到您的控制器。例如,应该设置此错误消息将驻留在 html 页面上的位置;

<h1>${flash.error}</h1>

玩!框架会将错误消息放在它找到这个 ${flash.error} 的地方。

于 2012-05-11T13:19:21.493 回答