2014-01-05 38 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

相关问题