2

昨天我一直在尝试将 SQL 数据库与 SmartGWT 集成以获得惰性列表,但我就是不知道如何实现它。(JavaDoc惰性列表示例

我想要做的是创建一个世界各地的一堆“网站”的列表。问题是可能会有大约一百万个,所以我试图一次加载尽可能少。我的数据库中的每个站点都有一个地址,所以我试图在树结构中对它们进行排序,例如(国家-> 州-> 城市-> 站点)。每次您下降一个级别时,都会向数据库查询所有下一个级别(无论是在所选州内拥有站点的所有城市,还是其他任何城市)。

任何帮助是极大的赞赏。

另外:在链接的示例中,文件夹和叶子是元素的类型,有没有办法让文件夹、文件夹和叶子成为单独的对象类型?

4

2 回答 2

3

请注意,该产品还有一个 Pro 版本,其中包括开箱即用的 SQL 连接(适用于 Java 服务器平台)。在这里展示:

http://www.smartclient.com/smartgwtee/showcase/

Pro 产品中的 SQL 连接器包括按需加载/数据分页、搜索和所有 4 种 CRUD 操作,以及数据源向导,如果您只需输入 JDBC 设置,就可以为现有数据库表生成工作 SQL 数据源。

请注意,Pro 产品不需要 SQL,这只是它可以连接的东西之一。

于 2009-11-24T12:15:35.087 回答
3

过了一会儿,我终于明白了。我最终创建了自己的 RPC,该 RPC 将提供一个字符串数组,这些字符串表示下一层的所有 TreeNode 的名称。

所以入口点是:

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
}

服务器端的 serverlet 创建查询,执行,然后将 ResultSet 转换为字符串数组并将其传回。回到客户端,回调所要做的就是将该数组转换为 TreeNode 数组,并将它们附加到单击的原始节点。最后,在所有这些之后,使用新节点重新绘制 GUI 元素。

我很惊讶节点加载之间的停机时间非常短(少于 1 秒),即使有时有一百个左右的节点被查询然后显示。

于 2009-07-15T16:15:05.573 回答