2011-10-17 147 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