1

在我的 grails 域中,我有一个字段 Date,即 java.util.Date。

在我的控制器中,我使用 SimpleDateFormate 从参数加载此日期。

准确地说,假设 params.date 类似于“20/02/2013 02:30 am”。在控制器中,我按如下方式加载:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm a"); domainInstance.date = simpleDateFormat.parse(params.date)

执行此语句时未检测到错误。但是,当域实例被保存时,会生成错误

[typeMismatch.Domain.date,typeMismatch.date,typeMismatch.java.util.Date,typeMismatch]; 参数 [org.springframework.context.support.DefaultMessageSourceResolvable:代码

[无法将类型“java.lang.String”的属性值转换为属性“date”所需的类型“java.util.Date”;嵌套异常是 java.lang.IllegalArgumentException:无法解析日期:无法解析的日期:“20/02/2013 02:30 am”]

谁能告诉我哪里出了问题。我很确定 SimpleDateFormat 将字符串解析为日期。为什么它接受为字符串。

4

3 回答 3

5

感谢您的回复,但我已经找到了问题的解决方案。问题是这样的。

我将我的 domainInstance 实例化为 domainInstance = new Domain(params) 这是控制器操作中的第一条语句。

执行此语句时,params 以“dd/MM/yyyy HH:mm a”格式保存日期。因此,此语句在 domainInstance 对象中添加了一个错误。

稍后在使用 SimpleDateFormat 后,变量会更新,但错误仍然存​​在于对象中,因此会出现错误。

此错误的解决方案是在语句“domainInstance = new Domain(params)”之后立即调用语句 domainInstance.clearErrors()。

这将清除对象中的所有错误。稍后在保存 domainInstance 时,将调用 validate。如果由于某些其他错误而导致验证失败,则此时会添加相应的错误。

拉莫汉

于 2013-02-14T07:38:44.460 回答
1

Grails 2.3.1 是实际问题

def domain = new FooBar(params)
domain.clearErrors()
domain.save(flush:true) // <--- validation will be there
if (doamin.hasErrors()) {
 ... do something
}
于 2013-10-30T08:28:29.083 回答
0

你可以试试:

domainInstance.date = new Date().parse("dd/MM/yyyy HH:mm a", params.date)
于 2013-02-13T06:20:37.810 回答