为什么在模板中没有显示Playframework自定义验证消息?

3
我正在尝试使用Play框架进行一些自定义验证,但似乎无法从模板中获取错误信息。
控制器代码如下:

        User user = User.findByEmail(email);

        if(user != null) {
            Logger.warn("User account already created for email %s", email);
            validation.addError("email", "该电子邮件地址已被使用。");
            params.flash();
            flash.error("请纠正以下错误!");
            signup();
        }

注册页面的HTML模板如下:
#{error 'email' /}
我可以看到控制器检测到了重复的电子邮件,但错误消息没有出现在模板中。
以上代码正确吗?
1个回答

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();
}

有道理,谢谢。这是Play重定向还是浏览器重定向? - emt14
为了保持无状态,Play通过调用浏览器重定向来调用新的操作。 - Codemwnci

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接