Как реализовать Lazy List с использованием SmartGWT и SQL - PullRequest
2 голосов
/ 14 июля 2009

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

Что я хочу сделать, так это создать список групп "сайтов" по всему миру. Проблема в том, что их, вероятно, будет около миллиона, поэтому я пытаюсь загрузить как можно меньше за раз. Каждый сайт в моей БД имеет адрес, поэтому я пытаюсь отсортировать их в древовидной структуре, например (Страна-> Штат-> Город-> Сайты). Каждый раз, когда вы переходите на другой уровень, к БД будет поступать запрос с запросом обо всех следующих уровнях (будь то все города, в которых есть сайты в выбранном штате, или что-то еще).

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

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

Ответы [ 2 ]

3 голосов
/ 24 ноября 2009

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

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

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

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

3 голосов
/ 15 июля 2009

Через некоторое время я наконец получил это. Я закончил тем, что создал свой собственный 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
}

Серверный сервер на стороне сервера создает запрос, выполняет его, затем преобразует ResultSet в массив строк и передает его обратно. Все, что нужно сделать обратному вызову, обратно на стороне клиента, - это преобразовать этот массив в массив TreeNodes и прикрепить их к исходному Node, по которому щелкнули. Наконец, после всего этого элемент GUI перерисовывается с новыми узлами.

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

...