2014-02-27 21 views
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 
+2

我認爲這更像是您的業務邏輯應該如何根據空值進行驗證的問題。我建議在調用Integer.parseInt之前驗證參數,或者使用默認的dobStart/End值。 – Armaiti

+1

我知道這並不能回答你的問題,但請......只是「Grails」。 Groovy在Grails上沒有這樣的東西。見Burt Beckwith的博客文章:https://burtbeckwith.com/blog/?p = 1213 – grantmcconnaughey

+0

Haave試圖添加一個標準'isNotNull(「dob」)'除了'between(...)'標準之外避免比較空值與日期? – Steinar

回答

0

結束了一個完全不同的問題,當我被重定向回到搜索頁面,它試圖重新填充我曾試圖尋找甚至認爲它正確的格式wasnt。