2011-10-17 191 views
2

我一直在谷歌搜索了一下,試圖找到這個答案。我會猜測答案可能是一個自定義約束,但無論如何,我會問Grails是否支持Date約束的概念,類似於它如何支持電子郵件或信用卡約束?Grails日期和日期範圍約束?

我認爲這將是非常有用的有一個日期,此外,一個標準的方式來指定範圍。

我問這裏是因爲我似乎無法找到這樣的約束條件的任何信息,但它出現在http://grails.org/doc/latest/ref/Constraints/range.html

謝謝你被暗示!

+0

該範圍約束是針對一系列數字而非日期。自定義驗證器可能是您需要的,因爲Grails沒有內置任何內容。可能有一個插件,但我不知道其中一個。 – Gregg

+0

是的,我也會說你必須去定製驗證 –

+0

@Gregg - 它說[在文檔中](http://grails.org/doc/latest/ref/Constraints/range.html),你可以具有** IntRange,日期或實現Comparable的任何對象,並提供下一個和前一個導航方法。**如果您始終想要針對固定範圍進行驗證,則應該可以工作。當然,這可能不是很有用的日期! – OverZealous

回答

6
static constraints = { 
    someDate(min: Date.parse('yyyy-MM-dd', '2011-10-10'), 
      max: Date.parse('yyyy-MM-dd', '2012-10-10'))  
} 
+0

一個問題在這裏......每次驗證運行時,都不會評估這些日期 - 它們要麼在啓動時或首次調用時進行評估。因此,在app運行10天之後,諸如'someDate(min:newDate,max:new Date()+ 10)'這樣的東西就開始變得有問題了。如果遇到這種情況,您可以使用自定義驗證器糾正問題。 – proflux

+0

@proflux我改變了這個例子來避免這個問題,謝謝 –

+0

@ Dnal我仍然認爲這個問題仍然存在,因爲你在靜態上下文中評估Date.parse()。因此,我認爲proflux的評論是有效的,而且你需要一個定製的驗證器。如果Grails允許你將一個閉包作爲min:和max的參數,這可能會很聰明,並且這樣可以在運行時對它進行評估。 – sbglasius