【问题标题】:How to implement a Lazy List using SmartGWT and SQL如何使用 SmartGWT 和 SQL 实现惰性列表
【发布时间】:2009-07-14 13:17:18
【问题描述】:
我昨天一直在尝试将 SQL 数据库与 SmartGWT 集成以获得惰性列表,但我就是不知道如何实现它。 (JavaDoc 和 example of a lazy list)
我想做的是创建一个世界各地的“网站”列表。问题是可能会有大约一百万个,所以我试图一次加载尽可能少。我的数据库中的每个站点都有一个地址,因此我尝试在树结构中对它们进行排序,例如(国家-> 州-> 城市-> 站点)。每次您下降一个级别时,都会向数据库查询所有下一个级别(无论是在所选州内拥有站点的所有城市,还是其他任何城市)。
非常感谢任何帮助。
另外:
在链接的示例中,文件夹和叶子是元素的类型,有没有办法让文件夹、文件夹和叶子成为单独的对象类型?
【问题讨论】:
标签:
java
sql
gwt
lazy-loading
smartgwt
【解决方案1】:
过了一会儿,我终于明白了。我最终创建了自己的 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 秒),即使有时有一百个左右的节点被查询然后显示。
【解决方案2】:
请注意,该产品还有一个 Pro 版本,其中包括开箱即用的 SQL 连接(适用于 Java 服务器平台)。在这里展示:
http://www.smartclient.com/smartgwtee/showcase/
Pro 产品中的 SQL 连接器包括按需加载/数据分页、搜索和所有 4 种 CRUD 操作,以及数据源向导,如果您只需输入 JDBC 设置,就可以为现有数据库表生成工作 SQL 数据源。
请注意,Pro 产品不需要 SQL,这只是它可以连接的东西之一。