为什么Playframework自定义验证消息不会显示在模板中

时间:2011-06-12 09:03:39

标签: java validation groovy playframework

我正在尝试使用play框架执行一些自定义验证,但我似乎无法从模板中获取错误。

控制器代码为:


        User user = User.findByEmail(email);

        if(user != null) {
            Logger.warn("User account already created for email %s", email);
            validation.addError("email", "This email address already in use.");
            params.flash();
            flash.error("Please correct the error below!");
            signup();
        }

和signup.html模板:

#{error 'email' /}

我可以看到控制器看到重复的电子邮件,但错误消息没有出现在模板中。

上面的代码是否正确?

1 个答案:

答案 0 :(得分:6)

因为您要转到不同的视图(即您将重定向回到注册视图),Play会执行重定向,这意味着错误不再在范围内,因为注册视图被视为新请求。

要解决此问题,您需要将验证消息保留为下一个请求,这可以通过使用validation.keep()函数来实现。

因此,请更改您的代码,以便在致电signup()之前,致电validation.keep()

您的代码应该是

if(user != null) {
    Logger.warn("User account already created for email %s", email);
    validation.addError("email", "This email address already in use.");
    params.flash();
    flash.error("Please correct the error below!");
    validation.keep();
    signup();
}