2011-06-12 60 views
3

我正在尝试使用Play框架执行一些自定义验证,但我似乎无法从模板中获取错误。为什么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' /}

我可以看到,控制器看到重复的电子邮件,但该错误信息不会出现在模板。

上面的代码是否正确?

回答

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

这是有道理的,谢谢。这是Play重定向还是浏览器重定向? – emt14 2011-06-12 09:28:20

+0

为了保持事物无状态,Play通过调用浏览器重定向来调用新操作。 – Codemwnci 2011-06-12 12:55:26