2009-07-14 45 views
2

我昨天尝试着整合SQL数据库和SmartGWT作为懒惰列表,但我无法弄清楚如何实现它。 (JavaDocexample of a lazy list如何使用SmartGWT和SQL实现懒惰列表

我想要做的是创建一系列世界各地的“网站”列表。问题是可能会有大约一百万个,所以我试图一次加载尽可能少的数据。我的数据库中的每个站点都有一个地址,所以我试图按照树状结构(国家 - >州 - >城市 - >站点)对它们进行排序。每当你降到一个级别时,都会向数据库提出一个查询,询问下一个级别(无论那些在所选州或哪个州都有站点的城市)。

任何帮助,非常感谢。

ALSO: 在示例链接的文件夹和叶子是元素的类型,有没有办法保留文件夹,文件夹,然后生成一个单独的对象类型?

回答

3

过了一会儿,我终于明白了。我最终创建了自己的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创建查询,执行,然后转换该结果集成一个字符串数组并传递回来。所有的回调都需要做,回到客户端,将该数组翻译成TreeNodes数组,并将它们附加到被单击的原始节点上。最后,在所有这些GUI元素都重新绘制新节点。

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

3

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

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

在Pro产品的SQL连接器包括点播/数据分页,搜索,以及所有4个CRUD操作的负载,以及数据源向导,可以生成工作SQL数据源对现有的数据库表如果你只是输入JDBC设置。

请注意,Pro产品不需要SQL,这只是它可以连接的其中一件事。