2015-02-06 29 views
0

我有表字段作爲模板。擴展表中的列沒有在Eclipse Scout上的表單數據中提供

對於我與anotation創建表單數據該表格字段

@FormData(value = AbstractMyTableData.class, sdkCommand = FormData.SdkCommand.USE, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE) 
public abstract class MyTableField extends AbstractTableField<MyTableField.Table> 

裏面MyTableField.Table我有n列,所有的人都在爲這一領域的表單數據提交,這樣我就可以像添加行:

int rowNum = formData.addRow(); 
formData.setColumn_1(rowNumber, value); 
.... 
formData.setColumn_n(rowNumber, value); 

現在我想延長我的表,這樣,而不是:

public class Table extends AbstractExtensibleTable { 

我現在有

public class Table extends AbstractTreeTable { 

AbstractTreeTable從這個link模板。

它裏面有兩個新的列。我的問題是AbstractMyTableData內部仍然只有n列,而不是那兩個。所以當我通過addRow創建新行時,我無法將這兩個值設置到該行。

請大家幫忙。


附加

餘did't看到AbstractTableFieldBeanData不只是隨機的類名像AbstractMyTableFieldData,但創建不同類型的表單數據。

現在我有基於bean的表數據。

但我的問題依然存在。即使在基於新的基於bean的數據中,也只有來自myTable的列而不是來自treeTable的列。

我的層次結構就像所描述的@Jmini。

AbstractTable 
| (no columns defined as inner class) 
| 
\---AbstractTreeTable 
    | (2 columns defined as inner class: ParentKeyColumn and KeyColumn) 
    | 
    \---MyTableField.Table 
     (additional columns defined as inner class) 

MyTableField.Table裏面MyTableField女巫模板。

所以我的代碼如下所示:

@FormData(sdkCommand = FormData.SdkCommand.CREATE, value = AbstractTableFieldBeanData.class, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE) 
public abstract class MyTableField extends 
AbstractTableField<MyTableField.Table> { 
.... 
    @Order(10.0) 
    public class Table extends AbstractTreeTable { 

AbstractTreeTable我沒有像@Jmini任何註釋建議。

我添加像行:

MyTableFieldRowData row = formData.addRow(); 
row.setColumn1(value); 

但裏面MyTableFieldRowData有來自AbstractTreeTable

我是否錯過了什麼沒有額外的行?基於

+0

錯誤459496(基於這個問題的輸入)已經修復,並且可以在mars nightly build上使用。 https://bugs.eclipse.org/bugs/show_bug.cgi?id=459496 – Jmini 2015-02-13 10:51:33

回答

0

陣列資料表:

如果你的方法是這樣的FORMDATA:

LoremTable table = formData.getLoremTable(); 
int r = table.addRow(); 
table.setAaaa(r, "Hello world"); 
table.setBbbb(r, 42); 

您正在使用Array based TableData


基於豆資料表:

如果你的方法是這樣的FORMDATA:

IpsumTable table = formData.getIpsumTable(); 
IpsumTableRowData rowData = table.addRow(); 
rowData.setAaaa("Hello world"); 
rowData.setBbbb(42); 

您正在使用Bean based TableData


您的情況:

總之你的情況,你有有看起來像一個複雜的繼承圖一表一TableField:

AbstractTable 
| (no columns defined as inner class) 
| 
\---AbstractTreeTable 
    | (2 columns defined as inner class: ParentKeyColumn and KeyColumn) 
    | 
    \---MyTableField.Table 
      (additional columns defined as inner class) 

您需要豆基表數據,因爲使用基於數組的表格數據,SDK將僅考慮MyTableField.Table的列來生成formData。使用基於bean的表格數據,您將獲得您期望的所有列。


解決您的問題的一種可能的方法是更改​​formData中生成的表格數據。這是在表格中的表字段類上配置的。

檢查表字段類的類型層次:

AbstractTableField (defined in the scout jar -> you can not modify it) 
| 
\---MyTableField 

的SDK檢查FormData註釋下來類型層次。

當Scout版本小於4.2時,AbstractTableField被配置爲使用基於數組的表格數據。在版本大於4.3時,它被配置爲使用基於bean的表數據。

在每個級別,你可以定義其他的東西。例如在MyTableField級別。你可以這樣做:

@FormData(sdkCommand = FormData.SdkCommand.USE, value = AbstractTableFieldBeanData.class, defaultSubtypeSdkCommand = FormData.DefaultSubtypeSdkCommand.CREATE) 
public class MyTableField extends AbstractTableField<MyTableField.Table> 

這將改變生成的代碼。


在wiki上,您可以閱讀其他示例。比如是你有這樣的:

AbstractTableField 
| 
\---AbstractMyAppTableField 
    | 
    \---MyTableField 

您可以在AbstractMyAppTableField定義所需的表數據。如果所有表字段的範圍擴展爲AbstractMyAppTableField(這是推薦的做法),只需一個配置,就可以更改應用程序的所有表數據,並確保每個開發人員都使用相同的模式。

+0

我在我的問題中添加了「額外」 – 2015-02-06 11:33:03

+0

我試圖重現您的設置(在您的問題的「其他」部分中進行了解釋)。我認爲你已經發現了一個錯誤,我在這裏打開它:https://bugs.eclipse.org/bugs/show_bug.cgi?id=459496 Bug描述中也提供了一個解決方法。感謝您花時間解釋您的案件。 – Jmini 2015-02-09 19:20:50

相關問題