У меня есть абстрактная форма:
@FormData(value = AbstractMyFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
public abstract class AbstractMyForm extends AbstractForm {
...
@Order(10.0)
@ClassId("MyForm.MyTable")
public class MyTable extends AbstractMyTableField {
...
}
}
Эти данные формы содержат некоторую таблицу (класс MyTable в качестве шаблона) внутри:
public abstract class AbstractMyFormData extends AbstractFormData {
private static final long serialVersionUID = 1L;
public AbstractMyFormData() {}
public MyTable getMyTable() {
return getFieldByClass(MyTable.class);
}
public static class MyTable extends AbstractMyTableData {
private static final long serialVersionUID = 1L;
public MyTable() {}
}
}
Моя реальная форма расширяет AbstractMyForm :
@FormData(value = MyFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
public class MyForm extends AbstractMyForm {
...
@Order(10.0)
@ClassId("MyForm.MyTable")
public class MyTable extends AbstractMyTableField {
...
}
}
данные формы для этого:
public class MyFormData extends AbstractMyFormData {
public MyTable getMyTable() {
return getFieldByClass(MyTable.class);
}
public static class MyTable extends AbstractMyTableData {
private static final long serialVersionUID = 1L;
public MyTable() {}
}
.....
.....
}
Проблема в том, что обе формы данных (AbstractMyFormData и MyFormData) реализованы
public static class MyTable extends AbstractMyTableData
и чем scout жалуется, что имеет дублирующийся метод getMyTable()
.
Но я этого не понимаю. Если MyFormData расширяется от AbstractMyFormData, то MyFormData не должен иметь этот метод внутри, потому что он уже есть его родителем.
Как это сделать? Я вижу FormData.SdkCommand.USE
, что по описанию может быть им, но я не знаю, как его использовать.
Второй вопрос, который может быть связан с этим, заключается в том, как внедрить таблицу в AbstractMyForm, как обычную кнопку «Отмена» вставки AbstractForm?
ИЗМЕНИТЬ:
Код для классов:
РЕЗЮМЕ
@FormData(value = AbstractPurchasePriceFormData.class, sdkCommand = FormData.SdkCommand.CREATE)
@ClassId("41f0f405-b257-47e7-accf-270f5be158ce")
public abstract class AbstractMyForm extends AbstractForm {
/**
* @throws org.eclipse.scout.commons.exception.ProcessingException
*/
public AbstractMyForm() throws ProcessingException {
super();
}
@Order(10.0)
public class MainBox extends AbstractGroupBox {
@Order(10.0)
public class MyTable extends AbstractMyTableField {
}
}
@Override
protected String getConfiguredTitle() {
return TEXTS.get("AbstractMyForm");
}
}
Шаблон AbstractMyTableField:
import org.eclipse.scout.commons.annotations.FormData;
import org.eclipse.scout.commons.annotations.Order;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractIntegerColumn;
import org.eclipse.scout.rt.client.ui.basic.table.columns.AbstractStringColumn;
import org.eclipse.scout.rt.client.ui.form.fields.tablefield.AbstractTableField;
import org.eclipse.scout.rt.extension.client.ui.basic.table.AbstractExtensibleTable;
@FormData(value = AbstractMyTableFieldData.class, sdkCommand = FormData.SdkCommand.CREATE, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE)
public abstract class AbstractMyTableField extends AbstractTableField<AbstractMyTableField.Table> {
@Order(10.0)
public class Table extends AbstractExtensibleTable {
@Order(10.0)
public class NameColumn extends AbstractStringColumn {
}
@Order(20.0)
public class AgeColumn extends AbstractIntegerColumn {
}
}
}
ДЛЯ РЕАЛЬНОЙ ФОРМЫ вы просто создаете форму из шаблона:
и в основном поле добавьте MyTable, например:
установлено:
@Order(10.0)
public class MainBox extends AbstractGroupBox {
}
do :
@Order(10.0)
public class MainBox extends AbstractGroupBox {
@Order(10.0)
public class MyTable extends AbstractMyTableField {
}
}
Надеюсь, в этот раз я был более откровенен.
ИЗМЕНИТЬ 2
Я признаю, что создание основного блока внутри абстрактной формы, возможно, не является правильным подходом, но я хочу добиться того, чтобы иметь AbstractMyTableField
в AbstractMyFormData, поэтому я могу полагаться на серверную сторону, что все формы, которые расширяются от AbstractMyForm, имеют это в данных формы, поэтому я может написать только один серверный метод для всех форм (возвращающий AbstractMyFormData).