我有一些抽象形式:
@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
而不是侦察员抱怨有重复的方法getMyTable()
。
但我不明白这一点。如果 MyFormData 是从 AbstractMyFormData 扩展的,那么 MyFormData 不能在里面有这个方法,因为它已经有了它的父级。
这个怎么做?我看到FormData.SdkCommand.USE
描述可能是它,但我现在不知道如何使用它。
女巫可能相关的第二个问题是如何像普通的 AbstractForm 注入取消按钮一样在 AbstractMyForm 中注入表?
编辑 :
类代码:
抽象形式
@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 {
}
}
}
对于 REAL FORM,您只需从模板创建表单:
并在主框中添加 MyTable,如:
插入:
@Order(10.0)
public class MainBox extends AbstractGroupBox {
}
做 :
@Order(10.0)
public class MainBox extends AbstractGroupBox {
@Order(10.0)
public class MyTable extends AbstractMyTableField {
}
}
我希望我这次更明确。
编辑 2
我承认在抽象表单中创建主框可能不是正确的方法,但我想要实现的是AbstractMyTableField
在 AbstractMyFormData 中,所以我可以依靠服务器端,所有从 AbstractMyForm 扩展的表单在表单数据中都有这个,所以我可以只为所有表单编写一个服务器方法(返回 AbstractMyFormData)。