Search code examples
gwtdatagridcallbackresultset

Dynamic DataGrid in GWT


I am trying to construct a DataGrid in GWT that will show an arbitrary dataset taken from an rpc method.

I have done some progress as I get the fields from a method and the data from another. I have managed to construct the Datagrid and add the columns from the rpc.getFields() method and fill the table using an AsyncDataProvider. The problem is that when I refresh the browser, it duplicates all the columns at the Datagrid. I cannot figure out what to do. I tried to remove first all the columns but no luck.

I attach the code if anyone have an idea.

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);         
  } 

Solution

  • When you refresh a browser, all UI is lost. There is no difference between (a) show the UI for the first time or (b) show the UI after browser refresh.

    Your comment "Only if I restart tomcat it works" suggests that the problem is on the server side. Most likely, you return twice the number of data points on a second call.