Java RichFaces rich:未指定树节点引用类型

Java RichFaces rich:未指定树节点引用类型,java,jsf,richfaces,Java,Jsf,Richfaces,我的JSF中有一个rich:tree,如下所示: <rich:tree value="#{MyBacking.treeNodes}" var="item" nodeFace="#{item.type}"> <rich:treeNode type="folder" <h:outputText value="#{item.folder}" />

我的JSF中有一个
rich:tree
,如下所示:

            <rich:tree value="#{MyBacking.treeNodes}" var="item"
                nodeFace="#{item.type}">
                <rich:treeNode type="folder"
                    <h:outputText value="#{item.folder}" />
                </rich:treeNode>
                <rich:treeNode type="file"
                    <h:outputText value="#{item.contfile}" />
                </rich:treeNode>
            </rich:tree>
项目类别:

public class LogTreeItem {
    private String type; 
    private String name; 

    public String getType() {
        return type;
    }

    public void setType(String t) {
        type = t;
    }

    public String getName() {
        return name;
    }

    public void setName(String n) {
        name = n;
    }
}
因此,JSF代码段现在是:

            <rich:tree value="#{MyBacking.treeNodes}" var="item" nodeFace="#{item.type}">
                <rich:treeNode type="folder">
                    <h:outputText value="#{item.name}" />
                </rich:treeNode>
            </rich:tree>

在这一点上,我所要做的就是识别一棵树。因为我只创建了一个带有rootNode的树,所以我希望得到一个单节点树输出,但实际上我什么也看不到。我知道我很接近,但我就是看不出有什么好办法能让它活过来


非常感谢

您的
项目
的类型似乎是
字符串
nodeFace
属性确定将为每个
项呈现下面定义的节点之一

必须使用包含自定义类型数据的节点填充树。假设您的
项目
如下所示:

public class Item {
    private String type; //getter+setter
    private String folder; //getter+setter
    private String contfile; //getter+setter
}
rootNode = new TreeNodeImpl<Item>();
for (some loop here) {
    TreeNode<Item> node = new TreeNodeImpl<Item>();
    Item item = ..; //get or create the item;
    node.setData(item);
    node.setParent(rootNode);
    rootNode.addChild("someIdentifier", node);
}
然后
treeNodes
实际上应该是
rootNode
,并且必须如下所示:

public class Item {
    private String type; //getter+setter
    private String folder; //getter+setter
    private String contfile; //getter+setter
}
rootNode = new TreeNodeImpl<Item>();
for (some loop here) {
    TreeNode<Item> node = new TreeNodeImpl<Item>();
    Item item = ..; //get or create the item;
    node.setData(item);
    node.setParent(rootNode);
    rootNode.addChild("someIdentifier", node);
}
rootNode=newtreenodeimpl();
对于(这里有一些循环){
TreeNode节点=新的TreeNodeImpl();
Item=..;//获取或创建项;
节点设置数据(项);
setParent(rootNode);
addChild(“someIdentifier”,节点);
}

我建议检查一下,看看它是如何在那里实现的。

谢谢你的建议-我认为这是正确的,但我修改了我的问题,加入了基于你答案的代码,因为它不太有效。你能告诉我为什么这段代码不输出树吗?@marklewis:是的,我忘了
rootNode.addChild(…):)谢谢。有趣的是,将“1”作为标识符并将
rootItem
作为我要添加的节点添加到行中,导致eclipse哀叹,
类型TreeNodeImpl中的addChild(Object,TreeNode)方法不适用于参数(String,LogTreeItem)
;我的一个选择是让
LogTreeItem
实现
TreeNode
;然后我不得不允许它将未实现的方法添加到
LogTreeItem
,以便构建它。这听起来对你合适吗?我刚刚注意到jsf引用
{item.name}
没有提取根节点的名称。听起来我还是有点不舒服。我的标识符应该是什么?javadoc表示一个对象,但我去过的所有站点都使用ints。标识符必须是您正在使用的对象的唯一标识符,您可以使用该标识符稍后获得原始对象。