从数据库将内容加载到TreeTable中

时间:2012-09-04 12:51:46

标签: java jsf jsf-2 primefaces treetable

Primefaces TreeTable节点似乎以相反的方式工作。

您创建一个父项,然后创建一个孩子,而不是告诉孩子它属于哪个父项。父母应该了解自己的孩子,而不是其他方式。

所以...我的问题是:

我需要从我的数据库(祖父母,父母,孩子和大孩子)加载未定义的大量数据。

如何将它们加载到TreeTable中?我无法想到在我的for-each中创建TreeNodes并设置它的父母的方式。

任何人都可以给我和想法吗?

1 个答案:

答案 0 :(得分: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);
 }

我将它们添加到地图的原因是,如果要引用它们,可以使用该键作为参考。 now如果要将节点添加到图片节点,例如

 //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"));
}

使用此方法,您可以递归循环遍历尽可能多的层次结构。我无法测试这段代码(只是记事本++),因为我现在在办公室。但是尝试一下,如果你仍然卡住我几个小时后回家的时候可以做更详细的事情。