2009-07-14 92 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,這只是它可以連接的其中一件事。