RichFaces rich:树节点未分配的面部类型

时间:2010-02-12 15:35:12

标签: 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}" />
                </rich:treeNode>
                <rich:treeNode type="file"
                    <h:outputText value="#{item.contfile}" />
                </rich:treeNode>
            </rich:tree>

和java运行时错误

'#{item.type}' Property 'type' not found on type java.lang.String

但是我已经查看了org.richfaces.model.TreeNodeImpl的javadoc,并且没有提到为树节点分配类型的方法。这是怎么做到的?

修改 我已根据提供的答案修改了代码。虽然感觉不对,但现在我的树被忽略了。 java看起来像这样:

在我的支持bean(MyBacking)中:

public TreeNodeImpl<LogTreeItem> getTreeNodes() {
    TreeNodeImpl<LogTreeItem> rootNode = new TreeNodeImpl<LogTreeItem>();
    LogTreeItem rootItem = new LogTreeItem();
    rootItem.setType("folder");
    rootItem.setName("folderName");
    rootNode.setData(rootItem);

    return rootNode;
}

项目类:

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的树,所以我期待一个节点树输出,但我根本没有看到任何东西。我知道我很接近,但我看不出会有什么调整能让它变得生动。

非常感谢

1 个答案:

答案 0 :(得分:1)

您的item似乎是String类型。 nodeFace属性确定将为每个item呈现下面定义的哪个节点。

您必须使用包含自定义类型数据的节点填充树。假设您的item看起来像这样:

public class Item {
    private String type; //getter+setter
    private String folder; //getter+setter
    private String contfile; //getter+setter
}

然后treeNodes实际应该是rootNode,并且必须如下所示:

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

我建议您查看richfaces demo sources,看看它是如何在那里实施的。