Eclipse scout neon 在字段更改时在抽象框中导入表单数据
Eclipse scout neon import form data in abstract box on field change
我有抽象组框。在这个组框中我有智能字段,并且在更改时我想填写表单中的其他一些字段。
问题是:
- 无法创建抽象组框新框表单数据。
- 如果我尝试导入表单数据,因为检测到导入表单数据调用 setValue 循环。
我的尝试是将抽象组框更改为 "normal group box" 并设置如下值:
@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 对象并在客户端中设置值,但这不是我想要的...
我认为 this.getParentField()
上的 importFormFieldData
再次触发了智能字段上的 execChangedValue
。
尝试将更新的字段装在自己的组框中,并仅导入该组框中的数据,或者在您要更新的每个字段上手动取消导入。
问题 1 的解决方案
创建抽象方法AbstractCarSelectionBoxData createNewBoxData();
在 AbstractCarSelectionBox
中并在返回新表单数据的相应子类中实现它,例如new MyFormDataContainingCarSelectionBox().getCarSelectionBox();
.
问题 2 的解决方案
在导入表单数据之前,在触发 execChangedValue
的字段上调用 setValueSet(false)
,例如formData.getMySmartfield().setValueSet(false)
。
这将确保它不会导入到表单中,因此不会发生循环检测。
我有抽象组框。在这个组框中我有智能字段,并且在更改时我想填写表单中的其他一些字段。
问题是:
- 无法创建抽象组框新框表单数据。
- 如果我尝试导入表单数据,因为检测到导入表单数据调用 setValue 循环。
我的尝试是将抽象组框更改为 "normal group box" 并设置如下值:
@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 对象并在客户端中设置值,但这不是我想要的...
我认为 this.getParentField()
上的 importFormFieldData
再次触发了智能字段上的 execChangedValue
。
尝试将更新的字段装在自己的组框中,并仅导入该组框中的数据,或者在您要更新的每个字段上手动取消导入。
问题 1 的解决方案
创建抽象方法AbstractCarSelectionBoxData createNewBoxData();
在 AbstractCarSelectionBox
中并在返回新表单数据的相应子类中实现它,例如new MyFormDataContainingCarSelectionBox().getCarSelectionBox();
.
问题 2 的解决方案
在导入表单数据之前,在触发 execChangedValue
的字段上调用 setValueSet(false)
,例如formData.getMySmartfield().setValueSet(false)
。
这将确保它不会导入到表单中,因此不会发生循环检测。