Olá Spranta,
tive este problema há pouco e para resolver ele fiz o seguinte:
Criei uma classe chamada Item:
public class Item {
private String type; //getter+setter
private String name; //getter+setter
public Item(String type, String name) {
this.type = type;
this.name = name;
}
}
Na minha classe ManagedBean, criei 2 objetos TreeNodeImpl, sendo que criei getter e stter para o itemNodes:
private TreeNodeImpl<Item> itemNodes = new TreeNodeImpl<Item>();
private TreeNodeImpl<Item> nivel1 = new TreeNodeImpl<Item>();
Mais abaixo, setei o type e o name do que vai aparecer no nível 1 e adicionei ele no itemNodes:
nivel1.setData(new Item("primeiroNivel", "Nivel 1"));
itemNodes.addChild(0, nivel1);
Depois criei 2 filhos para o “nivel1” e adicionei eles no “nivel1”:
TreeNodeImpl<Item> filho1 = new TreeNodeImpl<Item>();
filho1.setData(new Item("filho", "Filho 1"));
nivel1.addChild(0, filho1);
TreeNodeImpl<Item> filho2 = new TreeNodeImpl<Item>();
filho2.setData(new Item("filho", "Filho 2"));
nivel1.addChild(1, filho2);
Isto fez com que eu tivesse a seguinte árvore:
- Nível 1
++ Filho 1
++ Filho 2
No JSF, eu fiz:
<h:form id="meuForm">
<rich:tree value="#{meuMB.itemNodes}" var="item" nodeFace="#{item.type}">
<rich:treeNode type="primeiroNivel" iconLeaf="/imagens/nivel1.jpg" icon="/imagens/nivel1.jpg">
<h:outputText value="#{item.name}" />
</rich:treeNode>
<rich:treeNode type="filho" iconLeaf="/imagens/filho.jpg" icon="/imagens/filho.jpg">
<h:outputText value="#{item.name}" />
</rich:treeNode>
</rich:tree>
</h:form>
Com isto, o JSF mapeou o que estava dentro de cada Item e colocou a imagem correta de acordo com o item.type (que mapeia para o getType() do objeto item dentro de cada TreeNodeImpl.
Espero ter ajudado, mesmo depois de 5 anos 