gpt4 book ai didi

grails - 防止Grails 2.4.4接受无效日期

转载 作者:行者123 更新时间:2023-12-02 14:30:30 24 4
gpt4 key购买 nike

我的一位同事已经在Grails 2.4.4中编写了一个应用程序(我知道,它已过时)。该应用程序存在的一个问题是,您可以输入一个日期,例如2015年2月31日,该日期将被视为有效日期,而将在您的域对象中显示为2015年3月3日。

有没有简单的方法可以防止使用Grails发生这种情况?还是我们必须依靠客户端验证此特定属性?

谢谢。

最佳答案

假设Grails使用DateFormat解析日期String,问题在于它使用的是lenient Calendar。例如,将lenient设置为true(默认值),结果如您所述:

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'

但是,如果将其更改为false,则会在同一日期获得异常:
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'
}

因此,要在 Controller 中处理此验证,您可以
  • 创建一个command object
  • 让命令对象接受日期作为String而不是Date,然后执行日期验证。
  • 修改 Controller 操作以使用命令对象而不是params。这可能还需要修改GSP代码。
  • 关于grails - 防止Grails 2.4.4接受无效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33616168/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com