2012-07-02 49 views
3

我正在使用Java Play 2.0.1同時使用自定義驗證和play.data.validation.constraints,並且正在尋找一種方法來顯示窗體中發生的每一個錯誤,而不管無論我的代碼是驗證還是播放。顯示所有驗證錯誤使用flash()

我目前在做什麼來顯示所有錯誤,是我有一個方法在我的控制器添加包含在從form.errors()檢索的地圖中的所有錯誤,然後將它們添加到閃光範圍,所有錯誤都會被檢測到,但在第一次重定向時不會顯示,直到play.data.validation錯誤得到修復。

public static void addFlashError(Map<String, List<ValidationError>> errors){ 
     for(String key : errors.keySet()){ 
      List<ValidationError> currentError = errors.get(key); 
      for(ValidationError error : currentError){ 
       flash(key, error.message()); 
      } 
     } 
    } 

然後在我的scala.html顯示錯誤

<div class="alert-message error"> 
     @for((key, value) <- flash){ 
      <strong>Error : </strong> @value<br /> 
     } 
    </div> 

但這似乎並沒有成爲最簡單的解決方案,併發揮並不在同一時間顯示自定義驗證錯誤play.data.validation錯誤,就像顯示play.data.validation錯誤一樣,然後如果沒有Play檢查以查看該表中包含的公共String validate()是否包含。

是否有一個簡單的方法來顯示錶單中的所有錯誤,而不是play.data.validation錯誤,然後自定義驗證錯誤,如果play.data.validation錯誤不存在?

+0

爲什麼你將錯誤添加到閃存?你爲什麼不把'Map >'傳遞給你的視圖?除此之外,你問2個問題..;) –

+0

我想你是對的兩個問題的一部分,抱歉,我會編輯修復它。至於我爲什麼添加到閃光燈,它是保持在重新指導的範圍內的錯誤。 –

回答

0

我所做的就是致電form.hasErrors()並將該值存儲在變量中。接下來你做所有的自定義驗證。抓住form.errors()(就像你在做什麼),如果你發現任何錯誤,然後直接插入到該地圖。如果存在任何驗證錯誤,那麼像平常一樣傳回badRequest()以傳遞您的Form實例(其中包含帶有所有錯誤的錯誤圖)。

+0

可能是有史以來答案的最新接受,但謝謝你。剛剛重新回顧了這個問題,回想起我已經發布了一個問題,這似乎仍然是最好的解決方案。 –