しばらくしてようやく手に入れました。最終的に、次のレベルのすべてのTreeNodeの名前を表す文字列の配列を提供する独自のRPCを作成しました。
したがって、エントリポイントは次のようになります。
private NodeServiceAsync nodesRpc; //The RPC that grabs more nodes
private Tree data; //The data structure to hold all of the nodes
private ColumnTree list; //The GUI element that is shown on in the browser
public void onModuleLoad() {
nodesRpc = (NodeServiceAsync) GWT.create(NodeService.class);
data = new Tree();
list = new ColumnTree;
list.setAutoFetchData(true);
list.setLoadDataOnDemand(true);
list.addNodeSelectedHandler(new NodeSelectedHandler () {
public void onNodeSelected(NodeSelectedEvent event) {
if(/*Node is folder and hasn't been opened before*/) {
//Get More Nodes
AsyncCallback<String[]> callback = new NodeGetter<String[]>();
nodesRpc.getData(event.getNode(), callback);
}
else if(/*Node is not a folder (at the end) */) {
//Do something else
}
}
});
list.setData(data); //Make the GUI Element Represent The Data Structure
RootPanel.get().add(list); //Add to screen
}
サーバー側のサーバーレットは、クエリを作成して実行し、ResultSetを文字列の配列に変換して返します。クライアント側に戻って、コールバックが行う必要があるのは、その配列をTreeNodeの配列に変換し、クリックされた元のノードにアタッチすることだけです。最後に、このすべての後、GUI要素が新しいノードで再描画されます。
クエリされてから表示されるノードが100ほどある場合でも、ノードのロード間のダウンタイムが非常に短い(1秒未満)ことに驚きました。