0
我使用Grails和createCriteria來根據日期是否在2個用戶輸入日期之間縮小搜索結果的範圍。我所遇到的問題發生在所有正在搜索的日期屬性都發生空。這將導致一個錯誤說無法獲取java.lang.String的屬性'dayOfTheMonth'字符串
不能得到一個java.lang.String
是否有辦法解決的財產dayOfTheMonth?如果我將數據庫更改爲給用戶一個日期,那麼只有當所有的都爲空時纔會發生這種情況。
def c = User.createCriteria()
DateTime tempDobStart = new DateTime(Integer.parseInt(params.dobStart_year), Integer.parseInt(params.dobStart_month), Integer.parseInt(params.dobStart_day), 0, 0)
DateTime tempDobEnd = new DateTime(Integer.parseInt(params.dobEnd_year), Integer.parseInt(params.dobEnd_month), Integer.parseInt(params.dobEnd_day), 0, 0)
def results = c.list(params) {
and {
if (username) {
ilike("username", '%' + username.trim() + '%')
}
if (firstName) {
ilike("firstName", '%' + firstName.trim() + '%')
}
if (lastName) {
ilike("lastName", '%' + lastName.trim() + '%')
}
if (tempDobStart && tempDobEnd) {
between("dob", tempDobStart, tempDobEnd)
}
}
return results
我認爲這更像是您的業務邏輯應該如何根據空值進行驗證的問題。我建議在調用Integer.parseInt之前驗證參數,或者使用默認的dobStart/End值。 – Armaiti
我知道這並不能回答你的問題,但請......只是「Grails」。 Groovy在Grails上沒有這樣的東西。見Burt Beckwith的博客文章:https://burtbeckwith.com/blog/?p = 1213 – grantmcconnaughey
Haave試圖添加一個標準'isNotNull(「dob」)'除了'between(...)'標準之外避免比較空值與日期? – Steinar