TREE usando Richfaces

12 respostas
lblanco

Boa tarde a todos,

Gostaria de construir uma TREE usando o richfaces. Já olhei alguns posts do forúm falando sobre a TREE, porém em todos os posts a TREE já estava pronta. Gostaria de entender os objetos necessários para se criar uma arvore.

Alguma alma caridosa poderia me ajudar nesse inicio ? Gostaria de montar uma arvore bem simples, só pra entender o conceito. Exemplo:

Raiz:

  • Pai
    • FILHO 1
      • NETO 1
      • NETO 2
    • FILHO 2
      • NETO 1

O que até agora eu consegui entender foi que a raiz é o TreeNode.
Daí eu vi que existe o TreeNodeImpl , mas não consegui montar nada. Desculpe a minha ignorancia.
Abraços a todos.

12 Respostas

lblanco

Olá amigos, depois de algum tempo estudando a tree consegui montar uma buscando dados da base de dados. Utilizo uma forma recursiva pra montar a minha arvore que na verdade é o meu menu principal. Como utilizo JAVA e JAVA é free , porque não deixar aqui os meus processos ? Espero que ajude alguém.... Abraços

TABELA NO BANCO - MENU:
ID_MENU           NUMBER                                
OPERACAO        VARCHAR2(7)                           
OPERACAO_REF VARCHAR2(7) Y                         
ORDEM               NUMBER
TABELA DE OPERACOES.
ID_OPERACAO VARCHAR2(7)                            
SISTEMA     VARCHAR2(2)                            
DESCRICAO   VARCHAR2(40)                           
TP_OPERACAO NUMBER                                 
PERMISSAO   NUMBER                                 
FG_ATIVO    VARCHAR2(3)

Na coluna TP_OPERACAO ( 1 Formulário, 2 Relatório, 3 Menu )

ENTITY DA OPERACAO:

@Entity
@Table(name = "asoperacao")

  @NamedQueries({
  @NamedQuery(name="asOperacao.searchAll",     query="select e from asOperacao e "),
  @NamedQuery(name="asOperacao.searchFgAtivo", query="select e from asOperacao e where e.fgAtivo = :fgAtivo"),
  @NamedQuery(name="asOperacao.searchById",    query="select e from asOperacao e where e.idOperacao = :idOperacao")
})

public class asOperacao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name = "id_operacao", nullable = false)
    private String idOperacao;

    @ManyToOne   
    @JoinColumn( name="sistema", referencedColumnName="id_sistema")
    private asSistema sistema;
    
    @Column(name = "descricao", nullable = false)
    private String descricao;

    @ManyToOne
    @JoinColumn( name="tp_operacao", referencedColumnName="id_tp_operacao")
    private asTpOperacao tpOperacao;

    @ManyToOne
    @JoinColumn( name="permissao", referencedColumnName="id_permissao")
    private asPermissao permissao;

    @Column(name = "fg_ativo", nullable = false)
    private String fgAtivo;
    
    @OneToMany( mappedBy="operacao" )   
    private List<asMenu> asMenuOperacaoList;
    
    @OneToMany( mappedBy="operacaoRef" )   
    private List<asMenu> asMenuOperacaoRefList;  

    public asOperacao() {
    }

  // GETS E SETS
ENTITY DO MENU:
@Entity
@Table(name = "asmenu")
  @NamedQueries({
  @NamedQuery(name="asMenu.searchAll"       ,query="select e from asMenu e "),
  @NamedQuery(name="asMenu.searchById"      ,query="select e from asMenu e where e.idMenu      = :idMenu"  ),
  @NamedQuery(name="asMenu.searchOperMestre",query="select e from asMenu e where e.operacao    = :operacao"),
  @NamedQuery(name="asMenu.searchOperRef"   ,query="select e from asMenu e where e.operacaoRef = :operacaoRef")
})

public class asMenu implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name = "id_menu", nullable = false)
    private int idMenu;

    @ManyToOne   
    @JoinColumn( name="operacao", referencedColumnName="id_operacao")   
    private asOperacao operacao;
    
    @ManyToOne
    @JoinColumn( nullable=true, name="operacao_ref", referencedColumnName="id_operacao")
    private asOperacao operacaoRef;

    @Column(name = "ordem", nullable = false)
    private int ordem;

    public asMenu() {
    }

GETS E SETS
Agora vem o DAO dos ENTITYs:
public class asOperacaoDAO {

    /* Objetos necessarios */
    private asOperacao           asOperacao;
    private List                 asOperacaoList;
    private EntityManager        em;
    private EntityManagerFactory emf;

    /* Construtor */
    public asOperacaoDAO() {
        emf = Persistence.createEntityManagerFactory("websisPU");
    }

    /* Criando o Controler com JPA */
    private EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public asOperacao getAsOperacao() {
        if (this.asOperacao == null) {
            this.asOperacao = new asOperacao();
        }
        return this.asOperacao;
    }

    public void setAsOperacao(asOperacao asOperacao) {
        this.asOperacao = asOperacao;
    }

    public List getAsOperacaoList() {
        return asOperacaoList;
    }

    public void setAsOperacaoList(List asOperacaoList) {
        this.asOperacaoList = asOperacaoList;
    }

    /* Metodo responsavel por executar a query no objeto */
    public List searchAll() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asOperacao.searchAll");
            this.setAsOperacaoList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asOperacaoList;
    }

    /* Search pelo Id */
    public asOperacao searchId(String pIdOperacao) {
        try {
            /* Instancia objetos */
            em = getEntityManager();
            Query query = (Query) em.createNamedQuery("asOperacao.searchById").setParameter("idOperacao", (pIdOperacao));
            this.asOperacao = (asOperacao) query.getSingleResult();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            em.close();
        }

        return this.asOperacao;
    }

    /* Search pelo fgAtivo */
    public List searchFgAtivo(String fgAtivo) {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asOperacao.searchFgAtivo").setParameter("fgAtivo", fgAtivo);
            this.setAsOperacaoList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asOperacaoList;
    }

    /* Grava o objeto no banco */
    public String save(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(asOperacaoPar);
            em.getTransaction().commit();
            return "saveSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "saveError";
        } finally {
            em.close();

        }
    }

    /* Delete */
    public String delete(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            this.setAsOperacao(asOperacaoPar);
            em = getEntityManager();
            em.getTransaction().begin();
            asOperacao asOperacaoExcluir = em.find(asOperacao.class, getAsOperacao().getIdOperacao());
            em.remove(asOperacaoExcluir);
            em.getTransaction().commit();
            return "deleteSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "deleteError";
        } finally {
            em.close();
        }
    }

    /* Grava o objeto no banco */
    public String update(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.merge(asOperacaoPar);
            em.getTransaction().commit();
            return "updateSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "updateError";
        } finally {
            em.close();
            return "updateSucess";
        }
    }

    /* Metodo responsavel por buscar todos os registros da tabela */
    public List selectItems() {
        try {

            /* Variaveis necessárias */
            List lAsOperacao         = this.searchAll();
            ListIterator iAsOperacao = lAsOperacao.listIterator();
            List ret                 = new ArrayList();

            /* Abrindo o LIST e instanciando o RET com os valores String */
            while (iAsOperacao.hasNext()) {

                asOperacao asOperacaoItem = (asOperacao) iAsOperacao.next();
                SelectItem si             = new SelectItem();

                si.setValue(asOperacaoItem.getIdOperacao());
                si.setLabel(asOperacaoItem.getDescricao());

                ret.add(si);
            }

            return ret;

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
DAO DO MENU:
public class asMenuDAO {

    /* Objetos necessarios */
    private asMenu                asMenu;
    private List                  asMenuList;
    private EntityManager         em;
    private EntityManagerFactory  emf;

    /* Construtor */
    public asMenuDAO(){
        emf = Persistence.createEntityManagerFactory("websisPU");
    }

    /* Criando o Controler com JPA */
    private EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public asMenu getAsMenu() {
        if (this.asMenu == null) {
            this.asMenu = new asMenu();
        }
        return this.asMenu;
    }

    public void setAsMenu(asMenu asMenu) {
        this.asMenu = asMenu;
    }

    public List getAsMenuList() {
        return asMenuList;
    }

    public void setAsMenuList (List asMenuList) {
        this.asMenuList = asMenuList;
    }

    /* Metodo responsavel por executar a query no objeto */
    public List searchAll() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asMenu.searchAll");
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }
    
    /* Metodo responsavel por executar a query no objeto */
    public List searchAllOperacao() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            asOperacao    asOperacao    = new asOperacao();
            asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
            asOperacao  = asOperacaoDAO.searchId("gsm000");
            Query query = (Query) em.createNamedQuery("asMenu.searchOperMestre").setParameter("operacao",asOperacao);
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }
    
    /* Metodo responsavel por executar a query no objeto */
    public List searchAllOperacaoRef(String operacao) {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            asOperacao    asOperacao    = new asOperacao();
            asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
            asOperacao  = asOperacaoDAO.searchId(operacao);
            Query query = (Query) em.createNamedQuery("asMenu.searchOperRef").setParameter("operacaoRef",asOperacao);
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }


    /* Search pelo Id */
    public asMenu searchId(String idMenu) {
        try {
            /* Instancia objetos */
            em = getEntityManager();
            Query query = (Query) em.createNamedQuery("asMenu.searchById").setParameter("dMenu", Integer.parseInt(idMenu));
            this.asMenu = (asMenu) query.getSingleResult();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            em.close();
        }

        return this.asMenu;
    }

    /* Grava o objeto no banco */
    public String save(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(asMenuPar);
            em.getTransaction().commit();
            return "saveSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "saveError";
        } finally {
            em.close();

        }
    }

    /* Delete */
    public String delete(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            this.setAsMenu(asMenuPar);
            em = getEntityManager();
            em.getTransaction().begin();
            asMenu asMenuExcluir = em.find(asMenu.class, getAsMenu().getIdMenu());
            em.remove(asMenuExcluir);
            em.getTransaction().commit();
            return "deleteSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "deleteError";
        } finally {
            em.close();
        }
    }

    /* Grava o objeto no banco */
    public String update(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.merge(asMenuPar);
            em.getTransaction().commit();
            return "updateSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "updateError";
        } finally {
            em.close();
            return "updateSucess";
        }
    }
}

Depois do MODELO E O DAO PRONTOS vem o metodo que monta a arvore:

public class asMenuTree {

    private TreeNode     raiz      = null;
    private String       nodeTitle = "";

    /*Seleciona os itens da arvore*/
    private void loadMenu(String operacao, TreeNode node) {

        /* Variaveis necessárias */
        asMenuDAO asMenuDAO = new asMenuDAO();
        List lasMenu = asMenuDAO.searchAllOperacaoRef(operacao);
        ListIterator iasMenu = lasMenu.listIterator();
        int cont = 0;

        /* Abri o meu LIST e instanciei o RET com os valores String.*/
        while (iasMenu.hasNext()) {
            
            cont++;
            asMenu asMenu = (asMenu) iasMenu.next();

            /**/
            if (asMenu.getOperacao().getTpOperacao().getIdTpOperacao() == 3) {
               
               System.out.println("Mestre: "+asMenu.getOperacao().getDescricao());
               TreeNodeImpl nodeImpl = new TreeNodeImpl();
               nodeImpl.setData(asMenu.getOperacao().getDescricao());
               node.addChild(cont, nodeImpl);
               loadMenu(asMenu.getOperacao().getIdOperacao(), nodeImpl);
            } else {
               System.out.println("Detalhe: "+asMenu.getOperacao().getDescricao()); 
               TreeNodeImpl nodeImpl = new TreeNodeImpl();
               nodeImpl.setData(asMenu.getOperacao().getDescricao());
               node.addChild(cont, nodeImpl);
            }

        }
    }
   
    /*Monta a tree*/
    private void loadTree() {
        /*Instancia a arvore*/
        raiz = new TreeNodeImpl();
        loadMenu("gsm000",raiz);
    }
    
    /*Encontra a arvore*/
    public TreeNode getTreeNode() {
        if (raiz == null) {
            loadTree();
        }
        return raiz;

    }

E por fim o JSP:

<f:view> 
            <h:form>
                <table width="100%" border="0" cellpadding="0" cellspacing="0">
                    
                    <tr>
                        <td align="center" colspan="3">
                            <r:panelBar>
                                <h:panelGrid>
                                    &nbsp;
                                </h:panelGrid>
                            </r:panelBar>
                        </td>
                    </tr>
                    
                    <tr>
                        <td>
                            
                            <r:tree id="treeMenu"
                                    style="width:300px"
                                    ajaxSubmitSelection="true"  
                                    switchType="client"
                                    value="#{asController.tree}" 
                                    var="tree">
                            </r:tree>
                            
                            
                        </td>
                        
                        <td><br>
                           <r:panel id="dobox" styleClass="box">
                                <f:facet name="header"> <b> - AVISO DO SISTEMA </b> <br> </f:facet>
                                <r:effect event="onclick"  type="DropOut" params="duration:0.8" />
                                <r:effect event="onclick"  for="dobox"  type="Appear"/>
                                <h:outputText value="Em agosto entra em vigor o novo módulo de vendas." />
                            </r:panel>
                        </td>
                        
                        <td>
                            &nbsp;
                        </td>
                        
                    </tr>
                </table>
            </h:form>
        </f:view>

Galera, espero que isso ajude. Eu sofri um bocado pra fazer isso por falta de material !!!
Qualquer dúvida estamos as ordens.
Abraços

lblanco

Pessoal, proximo passo é pegar o nó que está selecionado. Quando eu conseguir eu vou postar aqui também. Mas se alguém souber será de grande ajuda.

Segue abaixo a foto da tree e os inserts da tabelas de menu e operação para ficar mais facil o entendimento dos senhores:



lblanco

TREE


fredferrao

Blz, achei bacana o exemplo, to começando com RichFaces agora, depois vou tentar fazer essa Tree.

J

Fala Lucas, bacana teres colocado teu código mesmo que não tenham respondido tua pergunta. Muitas vezes alguém tira sua dúvida e não posta solução.
Bom, eu consigo pegar o nó selecionado na minha aplicação. Podes fazer de várias formas. A mais recomendada é usar a atributo nodeSelectListener, mas eu não consegui usá-lo. Como eu estou usando o JBoss Seam, para mim foi fácil, já que o seam aceita métodos parametrizados. O código ficou mais ou menos assim:

View:

<s:decorate id="categoriaDecoration" template="layout/edit.xhtml">
        <ui:define name="label">Categoria</ui:define>
        <rich:tree id="treeMenu"   
	        switchType="client"  
	        value="#{treeBean.tree}"   
	        var="node">  
						
	        <rich:treeNode>
		        <h:outputText value="#{node.nome}"/>
			    <a:support event="onselected" actionListener="#{servicoHome.selectNode(node.id)}" reRender= "categoriaSelecionadaDecoration" />
            </rich:treeNode>

        </rich:tree> 
    </s:decorate>

servicoHome:

public void selectNode(String s) {
		log.info("No selecionado: " + s);
		
                // lógica da aplicação...
}

Mas se não estiveres usando Seam, podes contornar a situação com o componente do richfaces jsFunction, da seguinte forma:

  1. Crie uma propriedade no teu bean para receber o valor do nó selecionado;
  2. Use o componente jsFunction, que recebe um parâmetro e use a propriedade assignTo desse componente;
  3. Adicione a propriedade ‘onselected’ a tua árvore;
  4. Chame o método do jsFunction definido anteriormente, passando o parâmetro desejado à propriedade do bean.

Eu não testei essa última opção, mas eu já usei muito esse tipo de lógica e funcina sempre.

Espero ter ajudado.

lblanco

Grande Jaime,

Obrigado por responder. Pois então, alguns dias atras eu consegui resolver o problema usando nodeSelectListener mesmo de qualquer forma vou testar da forma com que você me explicou agora. Sempre é bom melhorar o código.

Já que é pra fazer, que se faça bem feito não é mesmo :slight_smile:
Obrigado, grande abraço.
Até mais.

insuportavel

Bom-dia Lucas.

Estou trabalhando em uma aplicação onde irei utilizar o richfaces tree e estava lendo o seu post (PARABÉNS) para tentar entender antes de programar.

Gostaria de saber da sua opinião quanto a seguinte situação.

Vou montar a raiz da arvore e toda ela com informações vindas da tela, o usuario ira preencher os campos de um formulário e conforme isto acontece o tree vai sendo construido e depois isto tudo será adicionado ao Banco de Dados em diferentes tabelas.

Isto é possivel? Eu consigo passar valores direto do formulario para a tree?

lblanco

Qual é o seu nome ?

Quanto a tree, acho que você irá conseguir fazer o que gostaria sem problemas.Será um pouco trabalhoso pelos controles que terá que fazer, ou seja, pai, filho , neto e etc. Mas dedicando um tempo em cima disso dá pra sair sim. Penso que o formulário estará amarrado a um controlador e esse controlador atualizara a arvore com ajax, usando o aj4:support

Em seguida , se os seus objetos estiverem mapeados certinho, para gravar no banco é um pulinho.

insuportavel

Hehehe Marcelo…

Bem acredito que seja por ai, a ideia de fazer esta arvore funcionar.

Ao contrario do que foi feito, não poderei deixar a operação ir ao Banco de Dados antes e montar a tree para ser exibida ao usuario.

Mas pelo menos ja tenho um ótimo inicio para que eu consiga escrever o controle.

lblanco

Pois é,

Crie os objetos que irá precisar para o formulario e a arvore usando um managed-bean com session.
Acho que é por aí o caminho.

Qualquer dúvida estamos aí.
Abraços.

S
lblanco:
Olá amigos, depois de algum tempo estudando a tree consegui montar uma buscando dados da base de dados. Utilizo uma forma recursiva pra montar a minha arvore que na verdade é o meu menu principal. Como utilizo JAVA e JAVA é free , porque não deixar aqui os meus processos ? Espero que ajude alguém.... Abraços TABELA NO BANCO - MENU:
ID_MENU           NUMBER                                
OPERACAO        VARCHAR2(7)                           
OPERACAO_REF VARCHAR2(7) Y                         
ORDEM               NUMBER
TABELA DE OPERACOES.
ID_OPERACAO VARCHAR2(7)                            
SISTEMA     VARCHAR2(2)                            
DESCRICAO   VARCHAR2(40)                           
TP_OPERACAO NUMBER                                 
PERMISSAO   NUMBER                                 
FG_ATIVO    VARCHAR2(3)

Na coluna TP_OPERACAO ( 1 Formulário, 2 Relatório, 3 Menu )

ENTITY DA OPERACAO:

@Entity
@Table(name = "asoperacao")

  @NamedQueries({
  @NamedQuery(name="asOperacao.searchAll",     query="select e from asOperacao e "),
  @NamedQuery(name="asOperacao.searchFgAtivo", query="select e from asOperacao e where e.fgAtivo = :fgAtivo"),
  @NamedQuery(name="asOperacao.searchById",    query="select e from asOperacao e where e.idOperacao = :idOperacao")
})

public class asOperacao implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name = "id_operacao", nullable = false)
    private String idOperacao;

    @ManyToOne   
    @JoinColumn( name="sistema", referencedColumnName="id_sistema")
    private asSistema sistema;
    
    @Column(name = "descricao", nullable = false)
    private String descricao;

    @ManyToOne
    @JoinColumn( name="tp_operacao", referencedColumnName="id_tp_operacao")
    private asTpOperacao tpOperacao;

    @ManyToOne
    @JoinColumn( name="permissao", referencedColumnName="id_permissao")
    private asPermissao permissao;

    @Column(name = "fg_ativo", nullable = false)
    private String fgAtivo;
    
    @OneToMany( mappedBy="operacao" )   
    private List&lt;asMenu&gt; asMenuOperacaoList;
    
    @OneToMany( mappedBy="operacaoRef" )   
    private List&lt;asMenu&gt; asMenuOperacaoRefList;  

    public asOperacao() {
    }

  // GETS E SETS
ENTITY DO MENU:
@Entity
@Table(name = "asmenu")
  @NamedQueries({
  @NamedQuery(name="asMenu.searchAll"       ,query="select e from asMenu e "),
  @NamedQuery(name="asMenu.searchById"      ,query="select e from asMenu e where e.idMenu      = :idMenu"  ),
  @NamedQuery(name="asMenu.searchOperMestre",query="select e from asMenu e where e.operacao    = :operacao"),
  @NamedQuery(name="asMenu.searchOperRef"   ,query="select e from asMenu e where e.operacaoRef = :operacaoRef")
})

public class asMenu implements Serializable {

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)

    @Column(name = "id_menu", nullable = false)
    private int idMenu;

    @ManyToOne   
    @JoinColumn( name="operacao", referencedColumnName="id_operacao")   
    private asOperacao operacao;
    
    @ManyToOne
    @JoinColumn( nullable=true, name="operacao_ref", referencedColumnName="id_operacao")
    private asOperacao operacaoRef;

    @Column(name = "ordem", nullable = false)
    private int ordem;

    public asMenu() {
    }

GETS E SETS
Agora vem o DAO dos ENTITYs:
public class asOperacaoDAO {

    /* Objetos necessarios */
    private asOperacao           asOperacao;
    private List                 asOperacaoList;
    private EntityManager        em;
    private EntityManagerFactory emf;

    /* Construtor */
    public asOperacaoDAO() {
        emf = Persistence.createEntityManagerFactory("websisPU");
    }

    /* Criando o Controler com JPA */
    private EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public asOperacao getAsOperacao() {
        if (this.asOperacao == null) {
            this.asOperacao = new asOperacao();
        }
        return this.asOperacao;
    }

    public void setAsOperacao(asOperacao asOperacao) {
        this.asOperacao = asOperacao;
    }

    public List getAsOperacaoList() {
        return asOperacaoList;
    }

    public void setAsOperacaoList(List asOperacaoList) {
        this.asOperacaoList = asOperacaoList;
    }

    /* Metodo responsavel por executar a query no objeto */
    public List searchAll() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asOperacao.searchAll");
            this.setAsOperacaoList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asOperacaoList;
    }

    /* Search pelo Id */
    public asOperacao searchId(String pIdOperacao) {
        try {
            /* Instancia objetos */
            em = getEntityManager();
            Query query = (Query) em.createNamedQuery("asOperacao.searchById").setParameter("idOperacao", (pIdOperacao));
            this.asOperacao = (asOperacao) query.getSingleResult();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            em.close();
        }

        return this.asOperacao;
    }

    /* Search pelo fgAtivo */
    public List searchFgAtivo(String fgAtivo) {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asOperacao.searchFgAtivo").setParameter("fgAtivo", fgAtivo);
            this.setAsOperacaoList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asOperacaoList;
    }

    /* Grava o objeto no banco */
    public String save(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(asOperacaoPar);
            em.getTransaction().commit();
            return "saveSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "saveError";
        } finally {
            em.close();

        }
    }

    /* Delete */
    public String delete(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            this.setAsOperacao(asOperacaoPar);
            em = getEntityManager();
            em.getTransaction().begin();
            asOperacao asOperacaoExcluir = em.find(asOperacao.class, getAsOperacao().getIdOperacao());
            em.remove(asOperacaoExcluir);
            em.getTransaction().commit();
            return "deleteSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "deleteError";
        } finally {
            em.close();
        }
    }

    /* Grava o objeto no banco */
    public String update(asOperacao asOperacaoPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.merge(asOperacaoPar);
            em.getTransaction().commit();
            return "updateSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(), "N");
            return "updateError";
        } finally {
            em.close();
            return "updateSucess";
        }
    }

    /* Metodo responsavel por buscar todos os registros da tabela */
    public List selectItems() {
        try {

            /* Variaveis necessárias */
            List lAsOperacao         = this.searchAll();
            ListIterator iAsOperacao = lAsOperacao.listIterator();
            List ret                 = new ArrayList();

            /* Abrindo o LIST e instanciando o RET com os valores String */
            while (iAsOperacao.hasNext()) {

                asOperacao asOperacaoItem = (asOperacao) iAsOperacao.next();
                SelectItem si             = new SelectItem();

                si.setValue(asOperacaoItem.getIdOperacao());
                si.setLabel(asOperacaoItem.getDescricao());

                ret.add(si);
            }

            return ret;

        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}
DAO DO MENU:
public class asMenuDAO {

    /* Objetos necessarios */
    private asMenu                asMenu;
    private List                  asMenuList;
    private EntityManager         em;
    private EntityManagerFactory  emf;

    /* Construtor */
    public asMenuDAO(){
        emf = Persistence.createEntityManagerFactory("websisPU");
    }

    /* Criando o Controler com JPA */
    private EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public asMenu getAsMenu() {
        if (this.asMenu == null) {
            this.asMenu = new asMenu();
        }
        return this.asMenu;
    }

    public void setAsMenu(asMenu asMenu) {
        this.asMenu = asMenu;
    }

    public List getAsMenuList() {
        return asMenuList;
    }

    public void setAsMenuList (List asMenuList) {
        this.asMenuList = asMenuList;
    }

    /* Metodo responsavel por executar a query no objeto */
    public List searchAll() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            Query query = (Query) em.createNamedQuery("asMenu.searchAll");
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }
    
    /* Metodo responsavel por executar a query no objeto */
    public List searchAllOperacao() {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            asOperacao    asOperacao    = new asOperacao();
            asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
            asOperacao  = asOperacaoDAO.searchId("gsm000");
            Query query = (Query) em.createNamedQuery("asMenu.searchOperMestre").setParameter("operacao",asOperacao);
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }
    
    /* Metodo responsavel por executar a query no objeto */
    public List searchAllOperacaoRef(String operacao) {

        /* Instancia objetos */
        em = getEntityManager();

        /* Acessa a namedQuery */
        try {
            asOperacao    asOperacao    = new asOperacao();
            asOperacaoDAO asOperacaoDAO = new asOperacaoDAO();
            asOperacao  = asOperacaoDAO.searchId(operacao);
            Query query = (Query) em.createNamedQuery("asMenu.searchOperRef").setParameter("operacaoRef",asOperacao);
            this.setAsMenuList(query.getResultList());
        } finally {
            em.close();
        }
        return this.asMenuList;
    }


    /* Search pelo Id */
    public asMenu searchId(String idMenu) {
        try {
            /* Instancia objetos */
            em = getEntityManager();
            Query query = (Query) em.createNamedQuery("asMenu.searchById").setParameter("dMenu", Integer.parseInt(idMenu));
            this.asMenu = (asMenu) query.getSingleResult();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            em.close();
        }

        return this.asMenu;
    }

    /* Grava o objeto no banco */
    public String save(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.persist(asMenuPar);
            em.getTransaction().commit();
            return "saveSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "saveError";
        } finally {
            em.close();

        }
    }

    /* Delete */
    public String delete(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            this.setAsMenu(asMenuPar);
            em = getEntityManager();
            em.getTransaction().begin();
            asMenu asMenuExcluir = em.find(asMenu.class, getAsMenu().getIdMenu());
            em.remove(asMenuExcluir);
            em.getTransaction().commit();
            return "deleteSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "deleteError";
        } finally {
            em.close();
        }
    }

    /* Grava o objeto no banco */
    public String update(asMenu asMenuPar) {
        try {

            /* Instancia objetos */
            em = getEntityManager();
            em.getTransaction().begin();
            em.merge(asMenuPar);
            em.getTransaction().commit();
            return "updateSucess";

        } catch (Exception ex) {
            ex.printStackTrace();
            messageUtility.addMensage(ex.getMessage(),"N");
            return "updateError";
        } finally {
            em.close();
            return "updateSucess";
        }
    }
}

Depois do MODELO E O DAO PRONTOS vem o metodo que monta a arvore:

public class asMenuTree {

    private TreeNode     raiz      = null;
    private String       nodeTitle = "";

    /*Seleciona os itens da arvore*/
    private void loadMenu(String operacao, TreeNode node) {

        /* Variaveis necessárias */
        asMenuDAO asMenuDAO = new asMenuDAO();
        List lasMenu = asMenuDAO.searchAllOperacaoRef(operacao);
        ListIterator iasMenu = lasMenu.listIterator();
        int cont = 0;

        /* Abri o meu LIST e instanciei o RET com os valores String.*/
        while (iasMenu.hasNext()) {
            
            cont++;
            asMenu asMenu = (asMenu) iasMenu.next();

            /**/
            if (asMenu.getOperacao().getTpOperacao().getIdTpOperacao() == 3) {
               
               System.out.println("Mestre: "+asMenu.getOperacao().getDescricao());
               TreeNodeImpl nodeImpl = new TreeNodeImpl();
               nodeImpl.setData(asMenu.getOperacao().getDescricao());
               node.addChild(cont, nodeImpl);
               loadMenu(asMenu.getOperacao().getIdOperacao(), nodeImpl);
            } else {
               System.out.println("Detalhe: "+asMenu.getOperacao().getDescricao()); 
               TreeNodeImpl nodeImpl = new TreeNodeImpl();
               nodeImpl.setData(asMenu.getOperacao().getDescricao());
               node.addChild(cont, nodeImpl);
            }

        }
    }
   
    /*Monta a tree*/
    private void loadTree() {
        /*Instancia a arvore*/
        raiz = new TreeNodeImpl();
        loadMenu("gsm000",raiz);
    }
    
    /*Encontra a arvore*/
    public TreeNode getTreeNode() {
        if (raiz == null) {
            loadTree();
        }
        return raiz;

    }

E por fim o JSP:

&lt;f:view&gt; 
            &lt;h:form&gt;
                &lt;table width="100%" border="0" cellpadding="0" cellspacing="0"&gt;
                    
                    &lt;tr&gt;
                        &lt;td align="center" colspan="3"&gt;
                            &lt;r:panelBar&gt;
                                &lt;h:panelGrid&gt;
                                    &nbsp;
                                &lt;/h:panelGrid&gt;
                            &lt;/r:panelBar&gt;
                        &lt;/td&gt;
                    &lt;/tr&gt;
                    
                    &lt;tr&gt;
                        &lt;td&gt;
                            
                            &lt;r:tree id="treeMenu"
                                    style="width:300px"
                                    ajaxSubmitSelection="true"  
                                    switchType="client"
                                    value="#{asController.tree}" 
                                    var="tree"&gt;
                            &lt;/r:tree&gt;
                            
                            
                        &lt;/td&gt;
                        
                        &lt;td&gt;<br>
                           &lt;r:panel id="dobox" styleClass="box"&gt;
                                &lt;f:facet name="header"&gt; <b> - AVISO DO SISTEMA </b> <br> &lt;/f:facet&gt;
                                &lt;r:effect event="onclick"  type="DropOut" params="duration:0.8" /&gt;
                                &lt;r:effect event="onclick"  for="dobox"  type="Appear"/&gt;
                                &lt;h:outputText value="Em agosto entra em vigor o novo módulo de vendas." /&gt;
                            &lt;/r:panel&gt;
                        &lt;/td&gt;
                        
                        &lt;td&gt;
                            &nbsp;
                        &lt;/td&gt;
                        
                    &lt;/tr&gt;
                &lt;/table&gt;
            &lt;/h:form&gt;
        &lt;/f:view&gt;

Galera, espero que isso ajude. Eu sofri um bocado pra fazer isso por falta de material !!!
Qualquer dúvida estamos as ordens.
Abraços

Opa tudo bom,

Gostei do teu artigo que vc escreveu descrevendo passo a passo como criar uma tree usando richfaces.

Vc poderia disponibilizar o teu asController que vc criou para eu conseguir entender. Estou tentando implementar o exemplo que vc criou e me deparei com algumas dificuldades em relação a chamada no asController.

Fico agradecido se disponibilizar,

Abcss

M

tambem estava precisando dessa classe asControler…

Criado 31 de maio de 2008
Ultima resposta 15 de dez. de 2009
Respostas 12
Participantes 6