Facenode no componente tree do richfaces

Pessoal, estou querendo utilizar o componente tree do richfaces, para uso simples eu consegui, no entanto, queria que eu mesmo pudesse indicar qual icone deverá aparecer em cada um dos niveis da tree, no exemplo que vi deve ser utilizado o seguinte:

<h:form>
    <rich:tree switchType="client" value="#{categoryRootNode.data}" var="item" nodeFace="#{item.type}">
	<rich:treeNode type="category" iconLeaf="../imagens/iconFolder.gif" icon="../imagens/iconFolder.gif">
		<h:outputText value="#{item.name}" />
	</rich:treeNode>
    </rich:tree>
</h:form>
	

Minha duvida é, onde eu seto o tal do item.type para fazer tal filtro entre os treeNode?

Bom, pelo que tenho usado rich:tree, na documentação do richFaces para developers podes encontrar tal informação, podendo até mesmo criar sua propria arvore com os icones q quiseres.

O link para a documentação, segue abaixo:

http://labs.jboss.com/file-access/default/members/jbossrichfaces/freezone/docs/devguide/en/pdf/richfaces-usersguide.pdf

http://livedemo.exadel.com/richfaces-demo/index.jsp

vá em Rich Trees

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 :slight_smile: