2013-02-13 36 views
1

在我的grails域中,我有一個字段Date,即java.util.Date。Grails日期被接受爲字符串

在我的控制器中,我使用SimpleDateFormate從params中加載這個日期。

準確地說,假設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:無法解析日期:無法解析日期:「2013年2月2日02:30」]

你能告訴我哪裏出問題了。我很確定SimpleDateFormat解析字符串日期。爲什麼它接受爲字符串。

+0

大家可以看一下該方法中的全部源代碼?在該行代碼之後(domainInstance.date = simpleDateFormat.parse(params.date)),您可能已使用params中的字符串值重新分配了'date'字段。 – hida 2013-02-13 06:57:37

+0

2.3以來的變化看看這裏:http://grails.1312388.n4.nabble.com/data-binding-dates-in-command-objects-td4651879.html @BindingFormat('MMddyyyy')你也可以設置在Config中使用類似這樣的默認格式。groovy: grails.databinding.dateFormats = ['MMddyyyy','yyyy-MM-dd HH:mm:ss.S','yyyy-MM-dd'T'hh:mm:ss'Z'「] – Vahid 2015-12-08 15:04:27

回答

0

你可以試試:

domainInstance.date = new Date().parse("dd/MM/yyyy HH:mm a", params.date) 
5

感謝您的答覆,但我已經找到了解決問題的辦法。問題是這樣的。

我正在將我的domainInstance實例化爲domainInstance = new Domain(params) 這是控制器操作中的第一條語句。

執行此語句時,params以格式「dd/MM/yyyy HH:mm a」保存日期。因此這個語句在domainInstance對象中添加一個錯誤。

後來在使用SimpleDateFormat後,變量被更新了,但是錯誤仍然保留在對象中,因爲這個錯誤會出現。

此錯誤的解決方案是在語句'domainInstance = new Domain(params)''調用語句domainInstance.clearErrors()之後立即解決。

清除對象中的所有錯誤。稍後當domainInstance被保存時,將調用validate。如果由於其他錯誤而導致驗證失敗,那麼相應的錯誤將在當時添加。

Rammohan

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 
} 
相關問題