Загрузка содержимого в TreeTable из базы данных

Узлы Primefaces TreeTable, похоже, работают обратным образом.

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

Итак... моя проблема:

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

Как динамически загрузить их в TreeTable? Я не могу придумать, как внутри моего for-each создать TreeNodes и установить его родителей.

Кто-нибудь может дать мне идею?


person BBacon    schedule 04.09.2012    source источник
comment
Хранение ссылки на родителя вместо набора дочерних элементов более оптимизировано. Таким образом, у вас будет только одна ссылка вместо набора ссылок. Легче поддерживать отношения, в базе данных это будет похоже. Может быть, это объясняет некоторую логику, стоящую за этим ;-)   -  person siebz0r    schedule 05.09.2012
comment
Используйте treeDS4j версии 2.1 (вики-страница)   -  person Mohamed Ennahdi El Idrissi    schedule 28.08.2018


Ответы (1)


Я еще не тестировал это решение, но я думаю, что оно должно работать. все примеры на витрине Primefaces жестко запрограммированы. Чтобы сделать его динамичным, вам придется работать с массивами.
Так, например, раздел жестко запрограммированного кода ниже:

 TreeNode documents = new DefaultTreeNode(new Document("Documents", "-", "Folder"), root);  
 TreeNode pictures = new DefaultTreeNode(new Document("Pictures", "-", "Folder"), root);  
 TreeNode music = new DefaultTreeNode(new Document("Music", "-", "Folder"), root);

Можно заменить на:

 Map<String, TreeNode> rootNodes = new HashMap<String, TreeNode>();

 //Retrieve the list of root Nodes. eg Tables in the database.
 for(Table table : databaseTables){

    //table.getTableName() will be the name of the node, it could be something like "music" or "documents"
    rootNodes.add(table.getTableName(), new DefaultTreeNode(table.getTableName(), new Document......, root);
 }

Причина, по которой я добавляю их на карту, заключается в том, что если вы хотите сослаться на них, вы можете использовать ключ в качестве ссылки. теперь Если вы хотите добавить узлы к узлу изображений, например

 //Create a new map
 Map<String, TreeNode> pictureNodes = new HashMap<String, TreeNode>();

 //now loop through your picture objects
for(picture : pictures){
    pictureNode.add(new DefaultTreeNode(picture.getName(), ......., root.get("pictures"));
}

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

person greenkode    schedule 04.09.2012
comment
В порядке! Спасибо! Я проверю это! - person BBacon; 04.09.2012