Exemplo simples de Rich:Tree
por upmauro@gmail.com
Amigos, venho através deste artigo repassar oque aprendi sobre o uso de tree no richfaces (http://www.jboss.org/jbossrichfaces) , atraves da tag rich:tree, como achei pouco conteúdo a respeito na internet publicado em nossa linguagem, acredito que esse artigo possa ajudar de maneira positiva.Primeiramente, vamos entender de que se trata, o “rich:tree“, ele é basicamente um renderizador de um componente de árvore que por sua vez apresenta nós e filhos, sucessivamente.
Não vou apresentar nada complexo e abrangente e detalhado nesse artigo sobre o mesmo, vou apenas dar um exemplo de simples ultilização. Caso, não tenha ainda observado, a Exadel possui um exemplo publicado do uso do tree no richfaces, atraves do endereço http://livedemo.exadel.com/richfaces-demo/richfaces/tree.jsf.
Vamos a principio criar nossa classe que representara os itens de nossa árvore, no nosso caso iremos chamar essa classe de ItemArvore, essa classe vai possuir a descrição do ítem da árvore e a lista de filhos que o nó possui, segue abaixo o codigo exemplificando a classe.
public class ItemArvore {
private String descricao;
private List<ItemArvore> filhos = new ArrayList<ItemArvore>();
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) { this.descricao = descricao
}
public List<ItemArvore> getFilhos() {
return filhos;
}
public void setFilhos(List<ItemArvore> filhos) {
this.filhos = filhos;
}
}
Nada mais que uma classe possuindo suas propriedades, seus gets e sets. Agora com nossa classe de item criada, vamos ao nosso Controller(Bean)p ara que enfim possamos monta-la.
A primeira coisa que devemos fazer em nosso bean é declarar a lista da nossa árvore, como segue abaixo :
// Lista que será o repositorio de elementos da nossa árvore
private Set<ItemArvore> arvore = new HashSet<ItemArvore>();
public Set<ItemArvore> getArvore() {
return arvore;
}
public void setArvore(Set<ItemArvore> arvore) {
this.arvore = arvore;
}
Após a declaração de nossa árvore, vamos criar o metodo que sera chamada a principio quando ela for renderizada, para carregar os nós a árvore :
private void loadDadosTree() {
// Criamos o primeiro item
ItemArvore item = new ItemArvore();
// Setamos sua descrição
item.setDescricao(“Primeiro nó da árvore.”);
// Adicionamos ele na árvore
arvore.add(item);
}
Feito isso, criaremos entao o metodo que ficara responsavel por popular o nó quando ele for expandido pelo usuario, como segue abaixo:
public void changeExpandListener(NodeExpandedEvent event) {
// Recuperamos o data do nó expandido
Object no = ((UIData) event.getComponent()).getRowData();
// Colocamos ele do tipo da classe que criamos de itens da árvore
ItemArvore item = (ItemArvore)no;
// Criamos um novo item qualquer para adicionarmos ao nó que foi clicado
ItemArvore itemAdicionar = new ItemArvore();
itemAdicionar.setDescricao(“Item teste”);
// Adicionamos na lista de filhos
item.getFilhos().add(itemAdicionar);
}
Feito isso ja temos nossa classe de Item e nosso Bean finalizado, vamos agora ao JSP :
<rich:tree id=”tree” style=”width:300px” ajaxSubmitSelection=”true” switchType=”ajax“ changeExpandListener=”#{bean.changeExpandListener}”>
<rich:recursiveTreeNodesAdaptor roots=”#{bean.arvore}” var=”no” nodes=”#{no.filhos}”>
<rich:treeNode>
<h:outputText value=”#{no.descricao}” />
</rich:treeNode>
</rich:recursiveTreeNodesAdaptor>
</rich:tree>
Simples assim, não entrei em detalhes mais exemplifiquei.
Espero ter ajudado !
Abraços []´s
upmauro@gmail.com