XML中的分层Vaadin树(MSDL)

时间:2011-12-01 12:01:14

标签: java xml tree vaadin

我试图从XML文件(MSDL)构建一个Vaadin树,我坚持将子项添加到我的树。到目前为止,我可以从我的XML文件中读取并显示我想要的标签/信息,但我不能从中创建一个Hierarchical strukture,例如:

我有一个XML文件,其中包含有关行星及其卫星及其所在星系的一些信息:

Milky Way
 -Sunsystem
  -Earth
   -"Moon"
  -Mars
    -Phobos
    -Deimos
  -Saturn
    -Titan
    -Tethys
Pinwheel Galaxy
 -somesystem
   -weirdPlanet1
     -moon1
     -moon2
   -weirdPlanet2
     -moon1
     -moon2

现在我希望在我的vaadin树中拥有相同的结构。我已经尝试了很多东西,但结果总是一样的:一些空值加在我的树上只能看到星系但我无法展开它们或者我可以看到一棵树上有所有的信息但是没有任何结构所有刚刚列出的行星/卫星:/

1 个答案:

答案 0 :(得分:1)

我很确定这与树本身没有任何关系。您可以尝试这样做,而不是直接将数据添加到树中:

  1. 将XML数据解析为HierarchicalContainer
  2. 使用下面的示例代码遍历HierarchicalContainer,并验证它与XML文件结构相同
  3. 通过调用Tree.setContainerDataSource(Container)
  4. 将数据容器绑定到树中

    迭代HierarchicalContainer的示例代码:

    void iterateContainer() {
        for(Object rootItemId : myContainer.rootItemIds()) {
            Item rootItem = myContainer.getItem(rootItemId);
            System.out.println(rootItem.getItemProperty(myLabelProperty).getValue());
    
            iterateChildren(rootItemId, 1);
        }
    }
    
    void iterateChildren(Object parentItemId, int indent) {
    
        for(Object childItemId : myContainer.getChildren(parentItemId)) {
            Item childItem = myContainer.getItem(childItemId);
    
            for(int i = 0; i < indent; i++) {
                System.out.print(" ");
            }
            System.out.println(childItem.getItemProperty(myLabelProperty).getValue());
    
            if(myContainer.hasChildren(childItemId)) {
                iterateChildren(childItemId, indent+1);
            }
        }
    
    }
    

    这只是一些未经测试的QnD代码,但这可以帮助您遍历容器。

    编辑:刚刚注意到我的答案可能(部分)是一个愚蠢的解决方案,因为Tree已经使用了HierarchicalContainer。您可以初始化myContainer HierarchicalContainer myContainer = (HierarchicalContainer) myTree.getContainerDataSource();并使用上面的代码。

    edit2:如果结构不相同,请查看它出错的地方并让调试器完成剩下的工作.. :)