Я хочу проверить зависимости полей с другим полем, когда текущее поле изменилось.
Основная идея заключается в том, что если у меня есть поле A
и поля B,C,D,E,...
и в этих полях есть какой-то сложный график зависимостей, я бы хотел, чтобы он решался следующим образом:
- Когда я устанавливаю значение A экспортировать данные формы (текущее состояние формы)
- данные формы отправляются на сервер разведки
- на сервере scout рассчитывается и разрешается график зависимостей (получаем список по порядку)
- вызов
setters
полей в упорядоченном списке, которые "исправляют" данные формы - Импорт данных формы в конце.
Моя проблема в том, что если я вызову это событие в
@Override
protected void execChangedValue() {
// trigger export
// trigger server validation
// trigger import
}
я получил
2016-06-03 13:31:28,468 WARN scout-model-thread-22 o.e.s.rt.client.ui.form.fields.AbstractValueField - Loop detection in ...$FieldA with value 101191 [m4042 @ ]
java.lang.Exception: null
Как это исправить?
У меня даже есть проблема, что, если я получаю сообщение об ошибке, я хочу прервать импорт и вернуть старое значение.
@Override
protected void execChangedValue() {
// trigger export
// trigger server validation
if (error) {
setValueWithoutTrigger(oldValue)
} else {
// trigger import
}
}
Что такое oldValue
не имеет значения, это может быть нуль. (поэтому сбрасывайте значение при ошибке). Метод setValueWithoutTrigger
такой же, как setValue()
, но перед установленным значением вызывается this.setValueChangeTriggerEnabled(false);
Я знаю, что это как-то можно сделать, потому что я видел подобную функциональность в коде BSI.