Grails Can';t获取属性';月日';java.lang.String的

Grails Can';t获取属性';月日';java.lang.String的,grails,groovy,gorm,jodatime,Grails,Groovy,Gorm,Jodatime,Im使用Grails和createCriteria根据日期是否在2个用户输入日期之间来缩小搜索结果的范围。我遇到的问题发生在所有正在搜索的日期属性恰好为空时。这会导致一个错误的说法 无法获取java.lang.String的属性DayOfMonth 有办法解决这个问题吗?如果我更改数据库以给其中一个用户一个工作日期,则只有当所有数据都为空时才会发生这种情况 def c = User.createCriteria() DateTime tempDobStart = new Date

Im使用Grails和createCriteria根据日期是否在2个用户输入日期之间来缩小搜索结果的范围。我遇到的问题发生在所有正在搜索的日期属性恰好为空时。这会导致一个错误的说法

无法获取java.lang.String的属性DayOfMonth

有办法解决这个问题吗?如果我更改数据库以给其中一个用户一个工作日期,则只有当所有数据都为空时才会发生这种情况

    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值。我知道这根本不能回答您的问题,但请…只使用“Grails”。Grails上没有Groovy这样的东西。请参阅Burt Beckwith的博文:除了(…)之间的
标准之外,您是否尝试添加标准
isNotNull(“dob”)
,以避免将空值与日期进行比较?