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

emt*_*t14 3 java validation groovy playframework

我试图用播放框架执行一些自定义验证,但我似乎无法从模板中获取错误.

控制器代码是:


        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' /}

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

上面的代码是否正确?

Cod*_*nci 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();
}
Run Code Online (Sandbox Code Playgroud)