我正在尝试在GWT中构建一个DataGrid,它将显示从rpc方法中获取的任意数据集。
我从一个方法获取字段,从另一个方法获取数据,但我已经取得了一些进展。 我已经设法构造Datagrid并添加rpc.getFields()方法中的列,并使用AsyncDataProvider填充表。 问题是,当我刷新浏览器时,它会复制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);
}
答案 0 :(得分:1)
刷新浏览器时,所有UI都将丢失。 (a)首次显示UI或(b)在浏览器刷新后显示UI之间没有区别。
你的评论&#34;只有当我重新启动tomcat时它才能正常运行&#34;表明问题出在服务器端。最有可能的是,您在第二次调用时返回两倍的数据点。
答案 1 :(得分:0)
尝试清理表格,然后填写表格:
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);
}
}