我正在尝试使用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' /}
我可以看到控制器看到重复的电子邮件,但错误消息没有出现在模板中。
上面的代码是否正确?
答案 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();
}