RichFaces rich: тип дерева nodeFace не назначен - PullRequest
2 голосов
/ 12 февраля 2010

У меня в 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

Но я посмотрел на javadoc для org.richfaces.model.TreeNodeImpl, и нет упоминания о методе назначения типа узлу дерева. Как это сделать?

EDIT Я изменил код в соответствии с предоставленным ответом. Хотя это кажется правильным, мое дерево теперь игнорируется. Ява выглядит так:

В моем бобе (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 Ответ

1 голос
/ 12 февраля 2010

Похоже, что ваш 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 , чтобы увидеть, как это реализовано там.

...