2009-07-14 7 views
2

Я пытался вчера все попробовать интегрировать SQL-базу данных с SmartGWT для ленивого списка, но я просто не мог понять, как ее реализовать. (JavaDoc и example of a lazy list)Как реализовать Lazy List с помощью SmartGWT и SQL

Что я хочу сделать, это создать список кучей «сайтов» по ​​всему миру. Проблема в том, что, вероятно, будет около миллиона из них, поэтому я пытаюсь загрузить как можно меньше за раз. Каждый сайт в моей БД имеет адрес, поэтому я пытаюсь сортировать их в древовидной структуре, например (Country-> State-> City-> Sites). Каждый раз, когда вы опускаетесь на уровень, будет задан запрос к БД с просьбой о следующем уровне (будь то все города, в которых есть сайты в выбранном государстве или что когда-либо).

Любая помощь очень ценится.

ТАКЖЕ: В примере, связанном с папками, а листья - это тип элемента, есть способ сохранить папки, папки, а затем листы отдельного типа объекта?

ответ

3

Через некоторое время я наконец получил его. Я закончил создание своего собственного RPC, который будет обслуживать массив строк, который будет представлять имена всех TreeNodes для следующего уровня.

Так точка входа будет:

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 в массив строк и передает его обратно. Все обратные вызовы должны выполняться с обратной стороны на стороне клиента, переводить этот массив в массив TreeNodes и присоединять их к исходному узлу, на который было нажато. Наконец, после всего этого элемент GUI перерисовывается с новыми узлами.

Я был удивлен, что было очень мало времени простоя между нагрузками узлов (менее 1 сек), даже когда иногда было найдено около сотни узлов, где их запрашивали.

3

Обратите внимание, что есть также версия Pro, которая включает в себя такие возможности SQL, как это из коробки (для серверных платформ Java). Витрина здесь:

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

Разъем SQL в Pro продукт включает в себя нагрузку на пейджинг спрос/данных, поиска и всех 4-х операций CRUD, а также DataSource Волшебники, которые могут генерировать рабочий SQL DataSource для существующей таблицы базы данных если вы просто вводите настройки JDBC.

Обратите внимание, что продукт Pro не требует SQL, это лишь одна из тех вещей, к которым он может подключиться.