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 是第二次调用时数据点数量的两倍。
我正在尝试在 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 是第二次调用时数据点数量的两倍。