为什么gwt CellTable没有显示所有结果?

时间:2014-02-21 07:18:41

标签: java java-ee gwt user-interface

我使用rpc调用获取结果列表。我确定结果列表是正确的,因为当我使用对话框时,所有数据都在那里。但是当我把它放在CellTable中时,有些行丢失了。为什么会这样?

public void onSuccess(List<List<String>> result) {  
            CellTable<List<String>> bugsTable = new CellTable<List<String>>();
            // Create columns
            TextColumn<List<String>> idColumn = new TextColumn<List<String>>() {
              @Override
              public String getValue(List<String> recordSet) {
                return recordSet.get(0).toString();
              }
            };

            TextColumn<List<String>> idCommitColumn = new TextColumn<List<String>>() {
              @Override
              public String getValue(List<String> recordSet) {
                  return recordSet.get(1).toString();
              }
            };

            TextColumn<List<String>> erMessageColumn = new TextColumn<List<String>>() {
              @Override
              public String getValue(List<String> recordSet) {
                  return recordSet.get(2).toString();
              }
            };

            // Add the columns.
            bugsTable.addColumn(idColumn, "ID");
            bugsTable.addColumn(idCommitColumn, "ID commit");
            bugsTable.addColumn(erMessageColumn, "Message");

            // Set the total row count. This isn't strictly necessary, but it affects
            // paging calculations, so its good habit to keep the row count up to date.
            bugsTable.setRowCount(result.size(), true);

            // Push the data into the widget.
            bugsTable.setRowData(0, result);
            tabP.add(bugsTable, "bugs");
            RootPanel.get("loadingbarImg").setVisible(false);
        }
    }); 

1 个答案:

答案 0 :(得分:2)

默认ProvidesKeySimpleKeyProvider)将对象本身用作键,因此使用了equals()hashCode()java.util.List合约定义了equals()hashCode()行为,并强制要求具有相同项目的两个列表为equals()且具有相同的hashCode(),因此,你的列表中有一些相同的行,这可能是个问题。

解决方案:不要对行使用List<String>,而是定义特定的行类。