2011-06-12 32 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