我的一位同事在Grails 2.4.4中写了一个应用程序(我知道,已经过时了)。该应用程序存在的一个问题是,您可以输入2015年2月31日这样的日期,它将被接受为有效日期,并将在2015年3月3日的域对象中显示。
有没有简单的方法可以防止使用Grails发生这种情况?或者我们是否必须依赖客户端验证这个特定的属性?
感谢。
答案 0 :(得分:2)
假设Grails使用DateFormat来解析日期Calendar
,问题在于它使用了lenient import java.text.SimpleDateFormat
def sdf = new SimpleDateFormat('MM/dd/y')
assert sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015'
。例如,将lenient设置为true(默认值),结果如下所述:
sdf.lenient = false
try {
sdf.parse('02/31/2015').toString() == 'Tue Mar 03 00:00:00 EST 2015'
} catch (java.text.ParseException ex) {
// java.text.ParseException: Unparseable date: "02/31/2015"
println 'Oops'
}
但是,如果您将其更改为false,则会在同一日期获得例外:
String
因此,要在控制器中处理此验证,您可以
Date
而不是boolean activityIsOpen = false;
的日期,然后执行日期验证。