Установка свойства класса домена Grails завершилась неудачно.

У меня проблема с сеттером в Grails. У меня есть два свойства beforeTax и afterTax. Я хочу сохранить только одно свойство в базе данных перед налогом. В пользовательском интерфейсе я хочу, чтобы пользователь вводил данные до или после уплаты налогов. Поэтому я сделал afterTax временным свойством, например:

double getAfterTax(){
  return beforeTax * tax
}

void setAfterTax(double value){
  beforeTax = value / tax
}

Когда я сейчас ввожу значение после уплаты налога и хочу сохранить объект, проверка завершается ошибкой (до уплаты налога не может быть пустым значением)

Что я делаю неправильно?


person user1020194    schedule 29.10.2011    source источник


Ответы (2)


Если я правильно понял ваш вопрос, вы хотите вычислить beforeTax на основе значения afterTax?

Вы можете использовать методы обработчика событий beforeXXX(), где XXX — это Validate, Insert и Update для вычисления beforeTax. Тогда ограничение beforeTax может иметь значение nullable:false.

def beforeValidate() {
   computeBeforeTax() 
}
person Kjirsten    schedule 11.01.2012

Вы должны пометить одно свойство как временное, чтобы предотвратить попытку GORM сохранить эту переменную в БД. Попробуйте добавить эту строку в класс вашего домена, который содержит afterTax.

static transients = ['afterTax']
person Chris    schedule 30.10.2011
comment
Спасибо за Ваш ответ. Я не написал вопрос понятно. Я уже сделал его временным. см. в вопросе (поэтому я сделал afterTax временным свойством). Проблема в том, что привязка данных говорит мне, что пустое свойство (beforeTax) недействительно. Это правда, поэтому, чтобы решить мою проблему, я сделал значение beforeTax обнуляемым, и теперь оно работает. Это не совсем то, чего я хотел, потому что значение не должно быть обнуляемым, но это лучшее, что я получил на данный момент. - person user1020194; 31.10.2011
comment
я думаю, мне нужен кусок кода, который показывает создание/сохранение вашего объекта. в противном случае я не могу вам больше помочь, извините ;) - person Chris; 31.10.2011