Eclipse 侦察霓虹灯在字段更改时在抽象框中导入表单数据



我有抽象组框。在这个组框中,我有智能字段,在更改时,我想在表单中填写其他一些字段。

问题是:

  • 在抽象组框上,无法创建新框表单数据。
  • 如果我尝试导入表单数据,因为检测到称为 setValue 循环的导入表单数据。

我的尝试是将抽象分组框更改为"普通分组框"并设置如下值:

@Override
protected void execChangedValue() {
    AbstractCarSelectionBoxData formData = new AbstractCarSelectionBoxData();
    FormDataUtility.exportFormData(this.getParentField(), formData);
    formData = BEANS.get(IOfferFormService.class).loadCarInformations(formData);
    FormDataUtility.importFormFieldData(this.getParentField(), formData, false, null, null);
}

这种方法实际上有效,并填充数据,但我得到

2016-03-22 10:18:57,448 WARN  scout-model-thread-20 o.e.s.rt.client.ui.form.fields.AbstractValueField - Loop detection in com.sixt.leasing.scout.client.template.AbstractCarBox$CarTypeSixtField with value 279096 [m4042 @   ]
java.lang.Exception: null
         at org.eclipse.scout.rt.client.ui.form.fields.AbstractValueField.setValue(AbstractValueField.java:324) [org.eclipse.scout.rt.client-5.2.0.M5.jar:5.2.0.M5]
         at org.eclipse.scout.rt.client.ui.form.fields.AbstractValueField.importFormFieldData(AbstractValueField.java:219) [org.eclipse.scout.rt.client-5.2.0.M5.jar:5.2.0.M5]

处理此案的正确方法是什么?

我知道我总是只能获取 DTO 对象并在客户端中设置值,但这不是我想要的......

问题 1 的解决方案

创建抽象方法AbstractCarSelectionBoxData createNewBoxData();AbstractCarSelectionBox并在返回新表单数据的相应子类中实现它,例如 new MyFormDataContainingCarSelectionBox().getCarSelectionBox(); .

问题 2 的解决方案

导入表单数据之前,在触发execChangedValue的字段上调用setValueSet(false),例如 formData.getMySmartfield().setValueSet(false) .这将确保它不会导入到窗体中,因此不应进行循环检测。

我认为this.getParentField()上的importFormFieldData再次触发了智能领域的execChangedValue

尝试将更新的字段框在自己的分组框中,并仅在此分组框中导入数据,或者对要更新的每个字段手动执行 de 导入。

最新更新