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