2014-01-05 46 views
1

我有一個Cell Table用於輸出某些搜索結果。單元格表使用列表數據提供程序來更新信息。我想分開不同的部分,所以我試圖在跨越所有列的單元格的不同部分之間添加自定義行。我正在擴展AbstractCellTableBuilder來做到這一點,但是當我使用TableRowBuilder和startRow(),並將startRow()返回一個空指針異常給AbstractCellTableBuilder.java:243,它引用了tbody時,我的問題就出現了。所以這讓我相信我的單元格表沒有正確傳遞到AbstractCellTableBuilder。我對gwt和java的理解是非常基本的,所以我可能只是不明白這應該如何工作,而展示示例對於我來說是相當複雜的。如果任何人都可以知道我在搞什麼,或者有更簡單的例子可以幫助我,我將不勝感激!嘗試向gwt中的CellTable添加自定義行時發生空錯誤

我發現了一個類似的答案,並試圖實現它,這就是我如何提出我有什麼,但它的答案不夠詳細,足以讓我完全理解它是如何工作的。以下是我引用: Building a custom row on demand with GWT CellTableBuilder

編輯:

//Passing the CustomCellTableBuilder to the cell table 
    CustomCellTableBuilder buildRow = new CustomCellTableBuilder(); 
    cellTable_2.setTableBuilder(buildRow); 

的我是多麼正常的行添加到單元格表

searchProvider = new ListDataProvider<SearchColumn>(); 
    cellTable_2 = new CellTable<SearchColumn>(); 

    //Add columns to the cellTable 
    searchProvider.addDataDisplay(cellTable_2); 

    //What I call when adding a row to the cellTable using the ListDataProvider 
    searchProvider.getList().add(new SearchColumn("",label,"","","","","","","")); 

添加CustomCellTableBuilder到細胞表基本格式

用於添加自定義行的CustomCellTableBuilder:

public class CustomCellTableBuilder extends AbstractCellTableBuilder<SearchColumn>{ 
    public CustomCellTableBuilder() { 
     super(cellTable_2); 
    } 

    @Override 
    protected void buildRowImpl(SearchColumn rowValue, int absRowIndex){ 
     //building main rows logic 

     if (labelrow == 1){ 
      System.out.println("Going to build extra row if"); 
      buildExtraRow(absRowIndex, rowValue); 
     } 
     else { 
      System.out.println("Getting into normal buildRow"); 
      buildRow(rowValue,absRowIndex); 
     } 
    } 

    private void buildExtraRow(int absRowIndex, SearchColumn rowValue){ 

     start(true); 
     TableRowBuilder row = startRow(); 
     TableCellBuilder td = row.startTD().colSpan(getColumns().size()); 
     td.text("Testing this out").endTD(); 
     row.endTR(); 
    }} 
+0

的問題是您如何使用您的'CustomCellTableBuilder'。你爲什麼不把它交給'CellTable'? –

+0

對不起,我不確定我明白你的意思。從我已經能夠告訴我應該將CellTable傳遞給AbstractCellTableBuilder,這是超級(cellTable_2)應該做的據我瞭解。當我創建CustomCellTableBuilder的一個新實例時,我沒有傳遞cellTable_2,因爲這是一個子類的所有部分,cellTable_2是繼承的,所以我不知道它是否有必要。對不起,如果我的術語混淆或錯誤,我只是把這個程序當做愛好,所以我不擅長這個東西。 – ryooan

+0

您一般使用'CellTableBuilder'的方式是將它傳遞給'CellTable'的['setTableBuilder'](http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/cellview /client/AbstractCellTable.html#setTableBuilder%28com.google.gwt.user.cellview.client.CellTableBuilder%29)和「CellTable」使用它(以正確的順序調用方法)來構建/呈現表。這不是你在做什麼,所以至少要顯示更多的代碼。 –

回答

1

我想你應該在致電startRow()之前致電start(true),因爲tbody被初始化爲空。 Start()調用會將tbody初始化爲HtmlBuilderFactory.get().createTBodyBuilder()

The source不說謊。

就像這樣:

private void buildExtraRow(int absRowIndex, SearchColumn rowValue) { 
     start(true); // true makes builder to rebuild all rows 
     TableRowBuilder row = startRow(); 
     // whatever 
} 
+0

啊哈!這讓我過去了空錯誤,謝謝!它沒有像預期的那樣工作,但我認爲這解決了這個問題。 – ryooan

相關問題