Не може да се получи свойството „dayOfTheMonth“ на java.lang.String

Използвам Grails и createCriteria, за да стесня резултатите от търсенето въз основа на това дали дадена дата е между 2 въведени от потребителя дати. Проблемът, който имам, възниква, когато всички свойства на датата, които се търсят, са нулеви. Това причинява грешка, казвайки

не може да получи свойството dayOfTheMonth на java.lang.String

Има ли начин да се заобиколи това? Ако променя базата данни, за да дам на един от потребителите дата, когато работи, това се случва само когато всички са нулеви.

    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

person Roger    schedule 27.02.2014    source източник
comment
Мисля, че това е по-скоро въпрос как вашата бизнес логика трябва да се валидира срещу нулеви стойности. Бих предложил да потвърдите параметрите, преди да извикате Integer.parseInt или да имате стойности dobStart/End по подразбиране.   -  person Armaiti    schedule 27.02.2014
comment
Знам, че това изобщо не отговаря на въпроса ви, но моля...само Grails. Няма такова нещо като Groovy on Grails. Вижте публикацията в блога на Burt Beckwith: burtbeckwith.com/blog/?p=1213   -  person grantmcconnaughey    schedule 28.02.2014
comment
Опитвали ли сте да добавите критерий isNotNull("dob") в допълнение към критерия between(...), за да избегнете сравняването на нулеви стойности с дати?   -  person Steinar    schedule 28.02.2014


Отговори (1)


В крайна сметка се оказа съвсем различен проблем, когато пренасочвах обратно към страницата за търсене, тя се опитваше да попълни отново това, което се бях опитал да търся, дори мислех, че не е в правилния формат.

person Roger    schedule 28.02.2014