Java 如何在第一次数据获取后选择一个GWT CellTree节点?
我试图在从服务器异步获取数据之后选择CellTree的第一个根节点。这是我的密码:Java 如何在第一次数据获取后选择一个GWT CellTree节点?,java,gwt,Java,Gwt,我试图在从服务器异步获取数据之后选择CellTree的第一个根节点。这是我的密码: public class MyTreeModel implements TreeViewModel{ private MyServiceAsync myService = GWT.create(MyService.class); public <T> NodeInfo<?> getNodeInfo(T value) { Cell<MyTO> cel
public class MyTreeModel implements TreeViewModel{
private MyServiceAsync myService = GWT.create(MyService.class);
public <T> NodeInfo<?> getNodeInfo(T value) {
Cell<MyTO> cell = new AbstractCell<MyTO>() {
@Override
public void render(Context context, MyTO value, SafeHtmlBuilder sb) {
//rendering node...
}
};
return new DefaultNodeInfo<MyTO>(value instanceof MyTO ?
createBranchDataProvider((MyTO)value) : //fetching child nodes
cerateRootDataProvider(), cell); //fetching root nodes
}
@Override
public boolean isLeaf(Object value) {
if (value instanceof MyTO) {
MyTO to = (MyTO)value;
return to.isLeafNode();
}
return false;
}
private AbstractDataProvider<MyTO> cerateRootDataProvider() {
AsyncDataProvider<MyTO> dataProvider = new AsyncDataProvider<MyTO>() {
@Override
protected void onRangeChanged(HasData<MyTO> display) {
AsyncCallback<List<MyTO>> callback = new AsyncCallback<List<MyTO>>() {
@Override
public void onSuccess(List<MyTO> result) {
updateRowCount(result.size(), true);
updateRowData(0, result);
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
};
myService.getRootNodes(callback);
}
};
return dataProvider;
}
private AbstractDataProvider<MyTO> createBranchDataProvider(final MyTO value) {
AsyncDataProvider<MyTO> dataProvider = new AsyncDataProvider<MyTO>() {
@Override
protected void onRangeChanged(HasData<MyTO> display) {
AsyncCallback<List<MyTO>> callback = new AsyncCallback<List<MyTO>>() {
@Override
public void onSuccess(List<MyTO> result) {
updateRowCount(result.size(), true);
updateRowData(0, result);
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.toString());
}
};
myService.getChildNodes(value.getId(), callback);
}
};
return dataProvider;
}
但如果我们想要异步获取数据,我们将捕获IndexOutOfBoundsException,以防在创建树后立即尝试相同的操作,因为数据尚未获取。我如何知道cerateRootDataProvider()中何时触发onSuccess()事件?或者我可以使用另一种解决方案?请提些建议。我有两种打电话的选择
tree.getRootTreeNode().setChildOpen(0, true, true);
在适当的时候:
MyTreeModel
对象添加构造函数。将相应的演示者作为参数发送。在onSuccess
方法的末尾添加并调用类似于presenter.onDataLoadingComplete()的内容
onSuccess
方法的末尾激发它。在可以调用access`tree``对象的地方订阅它。调用必要的代码tree.getRootTreeNode().setChildOpen(0, true, true);