2016-06-03 5 views
0

Я хочу проверить зависимости полей с другим полем при изменении текущего поля.Eclipse Scout Neon on set set validation loop loop

Основная идея заключается в том, что если у меня есть поля A и поля B,C,D,E,... и есть некоторые сложные зависимости граф на этих полях, я хотел бы иметь его решить, как это:

  • Когда я установить значение формы экспорта данные (текущее состояние формы)
  • данные формы отправить разведчик серверу
  • на скаутских зависимости сервера графа вычисляются и ПОСТАНОВИЛИ (мы получаем список в порядке убывания)
  • вызов setters пол в упорядоченном л ist, которые «фиксируют» данные формы
  • Импортировать данные формы в конце.

Моя проблема заключается в том, что если я вызвать это событие в

@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 коде.

+0

Я не» t получить точку. Насколько я понимаю, вы хотите рассчитать значения полей B, C, D и E на сервере. Зачем вам тогда нужно определять методы execChangedValue() на клиенте? –

+0

Я не понимаю вашего комментария. Что тогда будет запускать проверку на стороне сервера, если не execChangedValue()? Если я хочу проверить триггер на сервере, когда пользователь меняет некоторые данные в поле A, его нужно запускать с клиента, а execChangedValue кажется мне подходящим местом. –

+0

Вы правы. Теперь я понимаю ваш вопрос. Спасибо. –

ответ

0

Невозможно установить значение поля в методе execChangedValue того же поля. Структура определяет петлю здесь.

Что вы могли бы сделать вместо этого использовать метод execValidateValue следующим

@Override 
protected String execValidateValue(String rawValue) throws ProcessingException { 
    MyFormData formData = new MyFormData(); 
    exportFormData(formData); 
    formData = sendFormDataToServerAndDoValidation(); 
    importBCDE(formData); 
    return formData.getTest().getValue(); 
    } 

метод importBCDE бы установить поля B, C, D и E, а не полевой А.

+0

Хорошо, но зачем обнаруживать цикл? (Я имею в виду, что я вижу код, и я знаю, почему, но ...) На самом деле нет цикла. Потому что импорт вызывается без триггера, поэтому execValidateValue больше не будет вызываться. Есть ли способ сказать, игнорировать обнаружение цикла, потому что я знаю, что не будет цикла? –

+0

Существует метод под названием 'setValueChangeTriggerEnabled (boolean b)'. Однако это не работает, когда поле устанавливает свое значение. –