Tree Table PrimeFaces does not work by selecting a node by Java

1

I have a p: tree being loaded automatically, so I need to do a search inside the nodes in the tree, I do the search and return the first node I find and I want to get it as the selected, but when I do this via code the tree stops working, I can not de-select or expand it anymore, everything stops working.

Mycode:

<m:linha><m:autocompletesize="4" bean="#{controller}" itemLabel="descricaoCompleta" dropdown="true"  minQueryLength="1"
                    value="#{controller.objetoFiltro.tipoObjeto}" method="listarTipoObjeto" label="Tipo de Objeto" maxResults="100"/>
                <m:input value="#{controller.objetoFiltro.nome}" label="Descrição" size="6" />
                <div class="ui-grid-col-2">
                    <br/>
                    <p:commandButton action="#{controller.pesquisar()}" styleClass="btn btn-primary float-left" value="Pesquisar" update="@form"/>
                </div>
            </m:linha>
            <m:linha>
                <div class="ui-grid-col-12">
                    <p:tree id="treeObjetos" value="#{controller.mapeamentos}" var="objeto" style="width: 100%" 
                    selectionMode="single" selection="#{controller.objetoSelecionado}" animate="true">
                        <p:treeNode expandedIcon="ui-icon-folder-open" collapsedIcon="ui-icon-folder-collapsed">
                            <h:outputText value="#{objeto.nome}"/>
                        </p:treeNode>
                    </p:tree>
                </div>
            </m:linha>

ManagedBean:

private Objeto objetoFiltro;

private TreeNode mapeamentos;

private TreeNode objetoSelecionado;

@PostConstruct
private void init() {
    List<Objeto> objetosRoot = objetoDAO.pesquisarObjetosPais();
    mapeamentos = new DefaultTreeNode();
    for (Objeto objeto : objetosRoot) {
        TreeNode filho = new DefaultTreeNode(objeto, mapeamentos);
        criarNode(objeto, filho);
    }
}

private void criarNode(Objeto objeto, TreeNode parentNode) {
    List<Objeto> objetos = objetoDAO.recuperarObjetosFilhos(objeto);
    for (Objeto item : objetos) {
        TreeNode filho = new DefaultTreeNode(item, parentNode);
        criarNode(item, filho);
    }
}

public void pesquisar() {
    TreeNode node = objetoPesquisado();
    node.setSelectable(true);
    node.setSelected(true);
}

public TreeNode objetoPesquisado() {
    TreeNode retorno = null;

    for (TreeNode item : mapeamentos.getChildren()) {
        if (objetoFiltro.getNome() != null && !objetoFiltro.getNome().isEmpty()) {
            if (((Objeto) item.getData()).getNome().contains(objetoFiltro.getNome())) {
                return item;
            }
        }
    }

    return retorno;
}
    
asked by anonymous 27.12.2016 / 20:29

0 answers