Primefaces+tree+carregamento da página

Pessoal tenho uma página de cadastro de usuários que tem o componente <p:tree> do primefaces porem essa página esta lenta para abrir, alguem sabe o motivo abaixo vou postar o código da página:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <link rel="stylesheet" type="text/css" href="#{facesContext.externalContext.request.contextPath}/resources/css/cadastros.css"/>
        <h:outputScript name="jquery.js" library="js" target="head"/> 
    </h:head>
    <h:body>
        <ui:composition template="/WEB-INF/template.xhtml">

            <ui:define name="conteudoPrincipal">
                <!-- Formulário para exibição dos dados-->
                <h:form id="formGerenciamentoUser">
                    <p:growl id="growl"/> 

                    <p:dataTable id="tableUsuarios" var="usuarios" value="#{gerenciamentoUserMB.usuarios}"
                                 paginator="true" rows="10"
                                 rowKey="#{usuarios.idUsuario}"
                                 selection="#{gerenciamentoUserMB.usuario}"
                                 selectionMode="single"
                                 resizableColumns="true"
                                 emptyMessage="Nenhum registro encontrado na base de dados"
                                 scrollable="true"
                                 styleClass="rodape"
                                 scrollHeight="500"
                                 paginatorTemplate="{FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
                                 rowsPerPageTemplate="5,10,15,20,30,40,50,60"
                                 paginatorPosition="bottom">
                        <!-- Evento disparado para o servidor toda vez que uma linha for selecionada na datatable -->
                        <p:ajax event="rowSelect" update=":formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar" listener="#{gerenciamentoUserMB.onRowSelect}"/>
                        <!-- Evento disparado para o servidor toda vez que ocorrer uma paginção na datatable -->
                        <p:ajax event="page" update=":formGerenciamentoUser:tableUsuarios :formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar" listener="#{gerenciamentoUserMB.pageEvent}"/>
                        <f:facet name="header">
                            Gerenciamento de Usuários  
                        </f:facet>
                        <p:column headerText="Id" rendered="false" >
                            #{usuarios.idUsuario}
                        </p:column>
                        <p:column headerText="Senha" rendered="false" >
                            #{usuarios.senha}
                        </p:column>
                        <p:column headerText="Login" width="350">
                            #{usuarios.login}
                        </p:column>
                        <p:column headerText="Nome" width="350">
                            #{usuarios.nome}
                        </p:column>
                        <p:column headerText="Telefone" width="400">
                            #{usuarios.telefone}
                        </p:column>

                    </p:dataTable>

                    <p:separator/>
                    <fieldset id="barraBotoes" style="float: right; border: none;">
                        <p:commandButton id="btnCadastrar" value="Cadastrar" disabled="false" oncomplete="dlgCadUser.show();" style="margin:  5px;"/>
                        <p:commandButton id="btnEditar" value="Editar" disabled="#{gerenciamentoUserMB.btnEditar}" update=":formEditUser:dialogEditUser" oncomplete="dlgEditUser.show();" style="margin: 5px;"/>
                        <p:commandButton id="btnExcluir" value="Excluir" disabled="#{gerenciamentoUserMB.btnExluir}" update=":formExcluirUser:confirmDialogExluirUser" oncomplete="confirExclusaoUser.show();" style="margin: 5px;"/>
                        <p:commandButton id="btnVisualizar" value="Visualizar" disabled="#{gerenciamentoUserMB.btnVisualizar}" update=":formVisuUser:pngVisualizar" oncomplete="dlgVisuUser.show();" style="margin: 5px;"/>
                    </fieldset>

                </h:form>

                <!-- Formulário onde o usuário podera visualizar os detalhes de um determinado 
               usuário-->
                <h:form id="formVisuUser">
                    <p:dialog header="Visualizar Detalhes do Usuário" widgetVar="dlgVisuUser" resizable="false" id="dlgVisuUser" modal="true">
                        <h:inputHidden value="#{gerenciamentoUserMB.usuario.senha}" id="idSenha"/>
                        <h:panelGrid id="pngVisualizar" columns="2" cellpadding="4" >
                            <h:outputLabel value="Login:" style="float: right;"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.login}" disabled="true" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Senha:" style="float: right;"/>
                            <p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" disabled="true" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Nome:" style="float: right;"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.nome}" disabled="true" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Telefone:" style="float: right;"/>
                            <p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="true" mask="(99) 9999-9999" style="width: 220px;font-weight:bold; "/>
                        </h:panelGrid>
                        <p:separator/>
                        <p:commandButton value="Ok" disabled="true" />
                        <p:commandButton value="Cancelar" onclick="dlgVisuUser.hide();"/>
                    </p:dialog>
                </h:form>
                <!-- Formulário onde o usuário poderá cadastrar um determinado usuário-->
                <h:form id="formCadUser">
                    <p:dialog header="Cadastrar Usuário" widgetVar="dlgCadUser" resizable="false" id="dialogCadUser" modal="true">
                        <p:messages id="msgTelaCadUser" autoUpdate="true"/>
                        <h:panelGrid id="pngEdit" columns="2" cellpadding="4">
                            <h:outputLabel value="Login:" style="float: left; font-weight: bold"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.login}" required="true" requiredMessage="O campo Login é obrigatório" disabled="false" style="width: 395px;font-weight:bold; "/>
                            <h:outputLabel value="Senha:" style="float: left;font-weight: bold"/>
                            <p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" required="true" requiredMessage="O campo Senha é obrigatório" disabled="false" feedback="true" promptLabel="Senha" weakLabel="Fraca" goodLabel="Boa" strongLabel="Excelente" style="width: 395px;font-weight:bold; "/>
                            <h:outputLabel value="Nome:" style="float: left;font-weight: bold"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.nome}" required="true" requiredMessage="O campo Nome é obrigatório" disabled="false" style="width: 395px;font-weight:bold; "/>
                            <h:outputLabel value="Telefone:" style="float: left;font-weight: bold"/>
                            <p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="false" mask="(99)9999-9999" style="width: 395px; font-weight:bold; "/>
                        </h:panelGrid>
                        <p:separator/>
                        <h:panelGrid columns="2">
                            <p:fieldset legend="Grupos">
                                <p:pickList id="pListPermissoes" value="#{gerenciamentoUserMB.userGrupos}" var="userGrupos" converter="convertString2Grupo"
                                            itemLabel="#{userGrupos.nome}" itemValue="#{userGrupos.idGrupo}">
                                </p:pickList>
                            </p:fieldset>

                            <p:fieldset legend="Permissões" toggleable="true" style="height: 245px; width: 450px;">
                                <div id="divPermissoes" style="height: 210px; overflow: auto !important;" >
                                    <p:tree value="#{gerenciamentoUserMB.nodeRoot}" var="node" id="checkboxTree"  
                                            selectionMode="checkbox"  
                                            selection="#{gerenciamentoUserMB.selectedNodes}"
                                            style="overflow: auto !important; width: 95%; margin: 0 auto;">  
                                        <p:treeNode>  
                                            <h:outputText value="#{node}" />  
                                        </p:treeNode>  
                                    </p:tree>
                                </div>
                            </p:fieldset>
                        </h:panelGrid>
                        <p:separator/>
                        <p:commandButton value="OK" action="#{gerenciamentoUserMB.salvar}" update="formCadUser:dialogCadUser" oncomplete="handleCadUserRequest(xhr, status, args);" style="width: 100px !important; margin-left: 2px;"/>
                        <p:commandButton value="Cancelar" onclick="dlgCadUser.hide();" style="width: 100px !important; margin-left: 20px;"/>
                    </p:dialog>

                    <script type="text/javascript">
                            function handleCadUserRequest(xhr, status, args) {
                                if (args.validationFailed || !args.FECHAR || args.FECHAR == undefined) {
                                    dlgCadUser.show();
                                } else {
                                    dlgCadUser.hide();
                                }

                            }
                    </script> 
                </h:form>

                <!-- Formulário onde o usuário podera editar os detalhes de um determinado 
                usuário-->
                <h:form id="formEditUser">
                    <p:dialog header="Editar Usuário" widgetVar="dlgEditUser" resizable="false" id="dialogEditUser" modal="true" >
                        <p:messages id="msgTeladitUser" autoUpdate="true"/>
                        <h:inputHidden value="#{gerenciamentoUserMB.usuario.idUsuario}" id="idUser"/>
                        <h:inputHidden value="#{gerenciamentoUserMB.usuario.senha}" id="idSenha"/>
                        <h:panelGrid id="pngEdit" columns="2" cellpadding="4" >
                            <h:outputLabel value="Login:" style="float: right;"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.login}" required="true" requiredMessage="O campo Login é obrigatório" disabled="false" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Senha:" style="float: right;"/>
                            <p:password value="#{gerenciamentoUserMB.usuario.senha}" redisplay="true" required="true" requiredMessage="O campo Senha é obrigatório" disabled="false" feedback="true" promptLabel="Senha" weakLabel="Fraca" goodLabel="Boa" strongLabel="Excelente" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Nome:" style="float: right;"/>
                            <p:inputText value="#{gerenciamentoUserMB.usuario.nome}" required="true" requiredMessage="O campo Nome é obrigatório" disabled="false" style="width: 220px;font-weight:bold; "/>
                            <h:outputLabel value="Telefone:" style="float: right;"/>
                            <p:inputMask value="#{gerenciamentoUserMB.usuario.telefone}" disabled="false" mask="(99)9999-9999" style="width: 220px;font-weight:bold; "/>
                        </h:panelGrid>
                        <p:separator/>
                        <p:fieldset legend="Grupos">
                            <p:pickList id="pListPermissoes" value="#{gerenciamentoUserMB.userGrupos}" var="userGrupos" converter="convertString2Grupo"
                                        itemLabel="#{userGrupos.nome}" itemValue="#{userGrupos.idGrupo}">
                            </p:pickList>
                        </p:fieldset>
                        <p:separator/>
                        <p:commandButton value="OK" action="#{gerenciamentoUserMB.editar}" oncomplete="handleEditUserRequest(xhr, status, args);"/>
                        <p:commandButton value="Cancelar" action="#{gerenciamentoUserMB.cancela}" oncomplete="handleEditUserRequest(xhr, status, args);"/>
                    </p:dialog>
                    <script type="text/javascript">
                        function handleEditUserRequest(xhr, status, args) {

                            if (args.validationFailed || !args.FECHAR || args.FECHAR == undefined) {
                                dlgEditUser.show();
                            } else {
                                dlgEditUser.hide();
                            }

                        }
                    </script> 
                </h:form>
                <!-- Dialog para confirmação de exclusão de um determindo usuário-->
                <h:form id="formExcluirUser"> 

                    <p:confirmDialog id="confirmDialogExluirUser" message="Deseja realmente excluir o usuário #{gerenciamentoUserMB.usuario.nome}?"  
                                     header="Excluir Usuário" severity="alert" widgetVar="confirExclusaoUser">  
                        <h:inputHidden value="#{gerenciamentoUserMB.usuario.idUsuario}"/>
                        <p:commandButton id="confirm" value="Sim" update=":formGerenciamentoUser:tableUsuarios :formGerenciamentoUser:btnEditar :formGerenciamentoUser:btnExcluir :formGerenciamentoUser:btnVisualizar :formGerenciamentoUser:growl" oncomplete="confirExclusaoUser.hide();"  
                                         actionListener="#{gerenciamentoUserMB.deletar(gerenciamentoUserMB.usuario.idUsuario)}" />  
                        <p:commandButton id="decline" value="Não" onclick="confirExclusaoUser.hide();" type="button" />   

                    </p:confirmDialog>  
                </h:form>
            </ui:define>
        </ui:composition>

    </h:body>

</html>

Posta o método que está carregando a sua árvore ai.

Cara, só com o xhtml fica difícil de saber. Pode ser no teu managed bean.

Está lento na hora de carregar a página, ou depois que carrega ao abrir os nodos?
Especifique um pouco melhor e ponha o código que tu utiliza para gerar a tree.

Esta lento na hora de abrir a página, e tipo tenho um botão cadastrar que abre um dialog, quando clico demora uns 2 segundo para abrir o dialog.

Abaixo segue o código do MB:

@ManagedBean(name = "gerenciamentoUserMB")
@RequestScoped
public class GerenciamentoUserMB implements Serializable {

    private List<Usuario> usuarios;
    private DualListModel<Grupo> userGrupos;
    private Usuario usuario;
    private boolean btnEditar = true;
    private boolean btnVisualizar = true;
    private boolean btnExluir = true;
    private boolean isFechaTela;
    private TreeNode nodeRoot;
    private TreeNode[] selectedNodes;

    public GerenciamentoUserMB() {
        this.usuario = new Usuario();
    }

    public String salvar() {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        InterfaceCadastroDao cadastroDao = new CadastroDaoImp();
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        InterfaceTipoPermissaoDao tipoCadastroDao = new TipoPermissaoDaoImp();
        InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        Properties properties = FacesContextUtil.getArquivoPropertiesConfAutLDAP();
        boolean isLoginLDAP = new LDAP(properties).isUsuarioValido(this.usuario.getLogin());
        this.usuario.setPermissoes(new HashSet<Permissao>());
        // Verificando se o login já existe na base de dados
        if (!usuarioDao.isLoginExiste(this.usuario.getLogin()) && isLoginLDAP) {
            try {
                for (Object grupo : this.userGrupos.getTarget()) {
                    this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
                }
                usuarioDao.salva(this.usuario);

                for (TreeNode treeNode : selectedNodes) {
                    if (treeNode.isLeaf()) {
                        Permissao permissao = new Permissao();
                        permissao.setCadastro(cadastroDao.buscaPorNome(treeNode.getParent()));
                        permissao.setTipoPermissao(tipoCadastroDao.buscaPorNome(treeNode.getData()));
                        permissao.setUsuario(usuarioDao.getUsuarioByLogin(this.usuario.getLogin()));
                        permissaoDao.salva(permissao);
                    }
                }

                facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi cadastrado com sucesso.", null));
                contextRequest.update("formGerenciamentoUser:tableUsuarios");
                contextRequest.update("formGerenciamentoUser:growl");
                this.isFechaTela = true;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario = new Usuario();
            } catch (ErroSalvarDadosException ex) {
                System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
                contextRequest.update("formCadUser:dialogCadUser");
                this.isFechaTela = false;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario.setLogin(null);
            } catch (HibernateException ex) {
                System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
                contextRequest.update("formCadUser:dialogCadUser");
                this.isFechaTela = false;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario.setLogin(null);
            }

        } else {
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "O usuário com o login " + this.usuario.getLogin() + " já esta cadastrado no sistema ou não existe no AD", null));
            contextRequest.update("formCadUser:dialogCadUser");
            this.isFechaTela = false;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
            this.usuario.setLogin(null);
        }

        return null;
    }

    public String editar() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        try {
            for (Object grupo : this.userGrupos.getTarget()) {
                this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
            }
            usuarioDao.edita(this.usuario);
            facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi alterado com sucesso.", null));
            contextRequest.update("formGerenciamentoUser:tableUsuarios");
            contextRequest.update("formGerenciamentoUser:growl");
            this.isFechaTela = true;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        } catch (ErroEditarRegistroBaseDadosException ex) {
            System.out.println("Erro ao editar as dados do usuário " + this.usuario.getNome() + " na base de dados. Erro: " + ex);
            facesContext.addMessage(null, new FacesMessage("Não foi possivel alterar os dados do usuário:  " + this.usuario.getNome() + " na base de dados.", null));
            contextRequest.update("formEditUser:dialogEditUser");
            this.isFechaTela = true;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        }

        return null;
    }

    public String deletar(Long idUsuario) {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        this.usuario = usuarioDao.buscaPorID(idUsuario);
        usuarioDao.exclui(this.usuario);
        facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi excluido com sucesso.", null));
        contextRequest.update("formGerenciamentoUser:tableUsuarios");
        contextRequest.update("formGerenciamentoUser:growl");
        this.isFechaTela = true;
        contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        this.usuario = new Usuario();
        return null;
    }

    public DualListModel<Grupo> getGrupos() {
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        List<Grupo> grupos = new ArrayList<Grupo>();
        List<Grupo> gruposAssociados = new ArrayList<Grupo>();

        for (Grupo grupo : grupoDao.buscaTodos()) {
            grupos.add(grupo);
        }
        this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
        return userGrupos;
    }

    public String cancela() {
        RequestContext context = RequestContext.getCurrentInstance();
        context.update("formGerenciamentoUser:tableUsuarios");
        context.addCallbackParam("FECHAR", true);
        return null;
    }

    public void onRowSelect(SelectEvent event) {
        this.btnEditar = false;
        this.btnVisualizar = false;
        this.btnExluir = false;

    }

    public void pageEvent(PageEvent event) {
        this.btnEditar = true;
        this.btnVisualizar = true;
        this.btnExluir = true;
    }

    public List<Usuario> getUsuarios() {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        this.usuarios = usuarioDao.buscaTodos();
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public boolean isBtnEditar() {
        return btnEditar;
    }

    public DualListModel<Grupo> getUserGrupos() {
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        List<Grupo> grupos = new ArrayList<Grupo>();
        List<Grupo> gruposAssociados = new ArrayList<Grupo>(5);
        Set<Grupo> gruposByLogin;
        if (this.usuario.getLogin() == null) {
            for (Grupo grupo : grupoDao.buscaTodos()) {
                grupos.add(grupo);
            }
        } else {
            gruposByLogin = usuarioDao.getUsuarioByLogin(this.usuario.getLogin()).getGrupos();
            for (Grupo grupo : gruposByLogin) {
                gruposAssociados.add(grupo);
            }
            for (Grupo grupo : grupoDao.getGrupoByUsuario(gruposByLogin.toArray())) {
                grupos.add(grupo);
            }
        }

        this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
        return userGrupos;
    }

    public void setUserGrupos(DualListModel<Grupo> userGrupos) {
        this.userGrupos = userGrupos;
    }

    public void setBtnEditar(boolean btnEditar) {
        this.btnEditar = btnEditar;
    }

    public boolean isBtnVisualizar() {
        return btnVisualizar;
    }

    public void setBtnVisualizar(boolean btnVisualizar) {
        this.btnVisualizar = btnVisualizar;
    }

    public boolean isBtnExluir() {
        return btnExluir;
    }

    public void setBtnExluir(boolean btnExluir) {
        this.btnExluir = btnExluir;
    }

    public boolean isIsFechaTela() {
        return isFechaTela;
    }

    public void setIsFechaTela(boolean isFechaTela) {
        this.isFechaTela = isFechaTela;
    }

    public TreeNode getNodeRoot() {
        InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
        this.nodeRoot = new DefaultTreeNode("root", null);
        for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) {
            TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot);
            for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) {
                TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai);
            }
        }
        return nodeRoot;
    }

    public void setNodeRoot(TreeNode nodeRoot) {
        this.nodeRoot = nodeRoot;
    }

    public TreeNode[] getSelectedNodes() {
        return selectedNodes;
    }

    public void setSelectedNodes(TreeNode[] selectedNodes) {
        this.selectedNodes = selectedNodes;
    }
}

Pessoal acho que resolvi, criei um método com a anotação @PostConstruct para carregar os elementos da tree e acabou a lentidão ele estava chamando o public TreeNode getNodeRoot() { InterfacePermissaoDao permissaoDao = new PermissaoDaoImp(); this.nodeRoot = new DefaultTreeNode("root", null); for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) { TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot); for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) { TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai); } } return nodeRoot; }
varias vezes, vocês que são mais experientes em jsf saberiam me explicar porque esse método esta sendo chamado varias vezes? estou usando a versão mais nova do mojarra como implementação, abaixo segue meu bean alterado:

package com.arcelormittal.scer.controller.cadastro.usuarios;

import com.arcelormittal.scer.dao.impl.CadastroDaoImp;
import com.arcelormittal.scer.dao.impl.GrupoDaoImp;
import com.arcelormittal.scer.dao.impl.PermissaoDaoImp;
import com.arcelormittal.scer.dao.impl.TipoPermissaoDaoImp;
import com.arcelormittal.scer.dao.impl.UsuarioDaoImp;
import com.arcelormittal.scer.dao.interfaces.InterfaceCadastroDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceGrupoDao;
import com.arcelormittal.scer.dao.interfaces.InterfacePermissaoDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceTipoPermissaoDao;
import com.arcelormittal.scer.dao.interfaces.InterfaceUsuarioDao;
import com.arcelormittal.scer.hibernate.pojos.Cadastro;
import com.arcelormittal.scer.hibernate.pojos.Grupo;
import com.arcelormittal.scer.hibernate.pojos.Permissao;
import com.arcelormittal.scer.hibernate.pojos.TipoPermissao;
import com.arcelormittal.scer.hibernate.pojos.Usuario;
import com.arcelormittal.scer.util.ErroEditarRegistroBaseDadosException;
import com.arcelormittal.scer.util.ErroSalvarDadosException;
import com.arcelormittal.scer.util.FacesContextUtil;
import com.arcelormittal.scer.util.LDAP;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.hibernate.HibernateException;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import org.primefaces.event.data.PageEvent;
import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.DualListModel;
import org.primefaces.model.TreeNode;

@ManagedBean(name = "gerenciamentoUserMB")
@RequestScoped
public class GerenciamentoUserMB implements Serializable {

    private List<Usuario> usuarios;
    private DualListModel<Grupo> userGrupos;
    private Usuario usuario;
    private boolean btnEditar = true;
    private boolean btnVisualizar = true;
    private boolean btnExluir = true;
    private boolean isFechaTela;
    private TreeNode nodeRoot;
    private TreeNode[] selectedNodes;

    public GerenciamentoUserMB() {
        this.usuario = new Usuario();
    }

    public String salvar() {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        InterfaceCadastroDao cadastroDao = new CadastroDaoImp();
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        InterfaceTipoPermissaoDao tipoCadastroDao = new TipoPermissaoDaoImp();
        InterfacePermissaoDao permissaoDao = new PermissaoDaoImp();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        Properties properties = FacesContextUtil.getArquivoPropertiesConfAutLDAP();
        boolean isLoginLDAP = new LDAP(properties).isUsuarioValido(this.usuario.getLogin());
        this.usuario.setPermissoes(new HashSet<Permissao>());
        // Verificando se o login já existe na base de dados
        if (!usuarioDao.isLoginExiste(this.usuario.getLogin()) && isLoginLDAP) {
            try {
                for (Object grupo : this.userGrupos.getTarget()) {
                    this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
                }
                usuarioDao.salva(this.usuario);

                for (TreeNode treeNode : selectedNodes) {
                    if (treeNode.isLeaf()) {
                        Permissao permissao = new Permissao();
                        permissao.setCadastro(cadastroDao.buscaPorNome(treeNode.getParent()));
                        permissao.setTipoPermissao(tipoCadastroDao.buscaPorNome(treeNode.getData()));
                        permissao.setUsuario(usuarioDao.getUsuarioByLogin(this.usuario.getLogin()));
                        permissaoDao.salva(permissao);
                    }
                }

                facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi cadastrado com sucesso.", null));
                contextRequest.update("formGerenciamentoUser:tableUsuarios");
                contextRequest.update("formGerenciamentoUser:growl");
                this.isFechaTela = true;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario = new Usuario();
            } catch (ErroSalvarDadosException ex) {
                System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
                contextRequest.update("formCadUser:dialogCadUser");
                this.isFechaTela = false;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario.setLogin(null);
            } catch (HibernateException ex) {
                System.out.println("Não foi possivel salvar o usuário: " + this.usuario.getNome() + " na base de dados. " + ex);
                facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Não foi pssivel salvar o usuário " + this.usuario.getNome() + " na base de dados.", null));
                contextRequest.update("formCadUser:dialogCadUser");
                this.isFechaTela = false;
                contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
                this.usuario.setLogin(null);
            }

        } else {
            facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "O usuário com o login " + this.usuario.getLogin() + " já esta cadastrado no sistema ou não existe no AD", null));
            contextRequest.update("formCadUser:dialogCadUser");
            this.isFechaTela = false;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
            this.usuario.setLogin(null);
        }

        return null;
    }

    public String editar() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        try {
            for (Object grupo : this.userGrupos.getTarget()) {
                this.usuario.getGrupos().add(grupoDao.buscaPorID((Long) grupo));
            }
            usuarioDao.edita(this.usuario);
            facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi alterado com sucesso.", null));
            contextRequest.update("formGerenciamentoUser:tableUsuarios");
            contextRequest.update("formGerenciamentoUser:growl");
            this.isFechaTela = true;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        } catch (ErroEditarRegistroBaseDadosException ex) {
            System.out.println("Erro ao editar as dados do usuário " + this.usuario.getNome() + " na base de dados. Erro: " + ex);
            facesContext.addMessage(null, new FacesMessage("Não foi possivel alterar os dados do usuário:  " + this.usuario.getNome() + " na base de dados.", null));
            contextRequest.update("formEditUser:dialogEditUser");
            this.isFechaTela = true;
            contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        }

        return null;
    }

    public String deletar(Long idUsuario) {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        FacesContext facesContext = FacesContext.getCurrentInstance();
        RequestContext contextRequest = RequestContext.getCurrentInstance();
        this.usuario = usuarioDao.buscaPorID(idUsuario);
        usuarioDao.exclui(this.usuario);
        facesContext.addMessage(null, new FacesMessage("O usuário " + this.usuario.getNome() + " foi excluido com sucesso.", null));
        contextRequest.update("formGerenciamentoUser:tableUsuarios");
        contextRequest.update("formGerenciamentoUser:growl");
        this.isFechaTela = true;
        contextRequest.addCallbackParam("FECHAR", this.isFechaTela);
        this.usuario = new Usuario();
        return null;
    }

    @PostConstruct
    public void carregaTree() {
        Long ti = System.currentTimeMillis();
        this.nodeRoot = new DefaultTreeNode("root", null);
        for (Cadastro cadastro : new CadastroDaoImp().buscaTodos()) {
            TreeNode nodePai = new DefaultTreeNode(cadastro.getNome(), this.nodeRoot);
            for (TipoPermissao tipoPermissao : new TipoPermissaoDaoImp().buscaTodos()) {
                TreeNode nodTippoPermissao = new DefaultTreeNode(tipoPermissao.getNome(), nodePai);
            }
        }
        Long ts = System.currentTimeMillis();
        Long tf = ts - ti;
        System.out.println("Tempo total carregamento arvore: " + tf);

    }

    public DualListModel<Grupo> getGrupos() {
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        List<Grupo> grupos = new ArrayList<Grupo>();
        List<Grupo> gruposAssociados = new ArrayList<Grupo>();

        for (Grupo grupo : grupoDao.buscaTodos()) {
            grupos.add(grupo);
        }
        this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
        return userGrupos;
    }

    public String cancela() {
        RequestContext context = RequestContext.getCurrentInstance();
        context.update("formGerenciamentoUser:tableUsuarios");
        context.addCallbackParam("FECHAR", true);
        return null;
    }

    public void onRowSelect(SelectEvent event) {
        this.btnEditar = false;
        this.btnVisualizar = false;
        this.btnExluir = false;

    }

    public void pageEvent(PageEvent event) {
        this.btnEditar = true;
        this.btnVisualizar = true;
        this.btnExluir = true;
    }

    public List<Usuario> getUsuarios() {
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        this.usuarios = usuarioDao.buscaTodos();
        return usuarios;
    }

    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public boolean isBtnEditar() {
        return btnEditar;
    }

    public DualListModel<Grupo> getUserGrupos() {
        InterfaceGrupoDao grupoDao = new GrupoDaoImp();
        InterfaceUsuarioDao usuarioDao = new UsuarioDaoImp();
        List<Grupo> grupos = new ArrayList<Grupo>();
        List<Grupo> gruposAssociados = new ArrayList<Grupo>(5);
        Set<Grupo> gruposByLogin;
        if (this.usuario.getLogin() == null) {
            for (Grupo grupo : grupoDao.buscaTodos()) {
                grupos.add(grupo);
            }
        } else {
            gruposByLogin = usuarioDao.getUsuarioByLogin(this.usuario.getLogin()).getGrupos();
            for (Grupo grupo : gruposByLogin) {
                gruposAssociados.add(grupo);
            }
            for (Grupo grupo : grupoDao.getGrupoByUsuario(gruposByLogin.toArray())) {
                grupos.add(grupo);
            }
        }

        this.userGrupos = new DualListModel<Grupo>(grupos, gruposAssociados);
        return userGrupos;
    }

    public void setUserGrupos(DualListModel<Grupo> userGrupos) {
        this.userGrupos = userGrupos;
    }

    public void setBtnEditar(boolean btnEditar) {
        this.btnEditar = btnEditar;
    }

    public boolean isBtnVisualizar() {
        return btnVisualizar;
    }

    public void setBtnVisualizar(boolean btnVisualizar) {
        this.btnVisualizar = btnVisualizar;
    }

    public boolean isBtnExluir() {
        return btnExluir;
    }

    public void setBtnExluir(boolean btnExluir) {
        this.btnExluir = btnExluir;
    }

    public boolean isIsFechaTela() {
        return isFechaTela;
    }

    public void setIsFechaTela(boolean isFechaTela) {
        this.isFechaTela = isFechaTela;
    }

    public TreeNode getNodeRoot() {
        return nodeRoot;
    }

    public void setNodeRoot(TreeNode nodeRoot) {
        this.nodeRoot = nodeRoot;
    }

    public TreeNode[] getSelectedNodes() {
        return selectedNodes;
    }

    public void setSelectedNodes(TreeNode[] selectedNodes) {
        this.selectedNodes = selectedNodes;
    }
}