GWT 中的动态数据网格

Dynamic DataGrid in GWT

我正在尝试在 GWT 中构建一个 DataGrid,它将显示从 rpc 方法中获取的任意数据集。

我取得了一些进展,因为我从一个方法获取字段并从另一个方法获取数据。 我设法构建了 Datagrid 并从 rpc.getFields() 方法添加了列,并使用 AsyncDataProvider 填充了 table。 问题是当我刷新浏览器时,它会复制 Datagrid 中的所有列。我不知道该怎么办。我试图先删除所有列,但没有成功。

如果有人有想法,我附上代码。

public class MyCallBack implements AsyncCallback<List<Field>> {

DataGrid<Record> dg;



public MyCallBack(DataGrid<Record> dgrid) { 
    this.dg=dgrid;

}

public void onFailure(Throwable caught) {
    Window.alert(caught.getMessage());
}

public void onSuccess(List<Field> result) { 
    for (int i=0;i<=result.size();i++) {            
        IndexedColumn ic = new IndexedColumn(i);
        dg.addColumn(ic, result.get(i).getLabel());         
    }           
}

public AsyncCallback<List<Field>> getCb() {
    return this;
}

public void onModuleLoad() {

    final DataGrid<Record> dg = new DataGrid<Record>();     

    MyCallBack mcb = new MyCallBack(dg);
    DataProvider dp = new DataProvider();

    DBConnectionAsync rpcService = (DBConnectionAsync) GWT.create(DBConnection.class);
    ServiceDefTarget target = (ServiceDefTarget) rpcService;
    String moduleRelativeURL = GWT.getModuleBaseURL() + "MySQLConnection";
    target.setServiceEntryPoint(moduleRelativeURL);

    rpcService.getFields(mcb.getCb()); 

    dp.addDataDisplay(dg);      
    dg.setVisibleRange(0, 200);
    SplitLayoutPanel slp = new SplitLayoutPanel();
    slp.setHeight("700px");
    slp.setWidth("1500px");
    slp.addWest(dg, 770);

    RootPanel.get().add(slp);         
  } 

尝试在像这样填充之前清除 table:

public void onSuccess(List<Field> result) { 
    clearTable();

    for (int i=0;i<=result.size();i++) {            
        IndexedColumn ic = new IndexedColumn(i);
        dg.addColumn(ic, result.get(i).getLabel());         
    }           
}

private void clearTable(){
    while (dg.getColumnCount() > 0) {
        db.removeColumn(0);
    }
}

当您刷新浏览器时,所有 UI 都将丢失。 (a) 第一次显示 UI 或 (b) 在浏览器刷新后显示 UI 之间没有区别。

您的评论"Only if I restart tomcat it works"表明问题出在服务器端。最有可能的是,您 return 是第二次调用时数据点数量的两倍。