尝试将自定义行添加到gwt中的CellTable时出现空错误

时间:2014-01-05 23:25:49

标签: java gwt celltable

我有一个Cell Table,用于输出一些搜索结果。单元格表使用列表数据提供程序来更新信息。我想分隔不同的部分,所以我试图在不同的部分之间添加一个自定义行,其中一个单元格跨越所有列。我正在扩展AbstractCellTableBuilder来执行此操作,但是当我使用TableRowBuilder和startRow()时,调用startRow()返回一个空指针异常,我的问题来自AbstractCellTableBuilder.java:243,它引用了tbody。所以这让我相信我的单元格表没有正确地传递给AbstractCellTableBuilder。我对gwt和java的理解是非常基础的,所以我可能只是不了解它应该如何工作,并且展示示例对我来说非常复杂。如果有人能告诉我在哪里弄乱,或者有任何更简单的例子可以帮助我,我会很感激!

我找到了类似的答案并试图实现它,这就是我想出的东西,但它的答案还不够详细,我不能完全理解它是如何工作的。这是我引用的内容: Building a custom row on demand with GWT CellTableBuilder

编辑:

如何将常规行添加到单元格表的基本格式

    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添加到单元格表:

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

用于添加自定义行的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();
    }}

1 个答案:

答案 0 :(得分:1)

我认为您应该在调用start(true)之前致电startRow(),因为tbody已初始化为null。 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
}