Why does not Tree come with a value, but with the name of the object in memory?

1

Error image

Managed Bean

package com.algaworks.erp.controller;

import java.io.Serializable;
import java.util.List;

import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import org.primefaces.model.DefaultTreeNode;
import org.primefaces.model.TreeNode;

import com.algaworks.erp.model.Categoria;
import com.algaworks.erp.repository.Categorias;

@Named
@ViewScoped
public class ConsultaCategoriaBean implements Serializable {

    private static final long serialVersionUID = 1L;

    @Inject private Categorias categorias;

    /**
     * interface do primefaces
     * 1º nível de nó
     * treenode que não aparece na arvore, é um no invisivel
     */
    private TreeNode raiz; 

    public void consultar(){
        List<Categoria> categoriasRaizes = categorias.raizes();
        this.raiz = new DefaultTreeNode("Raiz", null);
        adicionarNos(categoriasRaizes,this.raiz);

    }

    private void adicionarNos(List<Categoria> categorias, TreeNode pai){
        /**
         * Iterando na lista e adicionar 
         */
        for(Categoria categoria : categorias){

            /**Instanciando um novo nó
             * passando o valor(categoria), pai
             * no - pai - categoria atual
             */
            TreeNode no = new DefaultTreeNode(categorias, pai);
            //raiz.getChildren().add(no);

            /**chamar adicionandoNos recursivamente passsando o valor(categoria.getSubcategorias(), pai(no))
             * para carregar subcategorias para a categoria atual (no)
             * Consulta lazy para subCategorias
             */
            adicionarNos(categoria.getSubcategorias(), no);
        }
    }

    public TreeNode getRaiz() {
        return raiz;
    }![inserir a descrição da imagem aqui][1]

}

Facelet

<!DOCTYPE html>

<!-- DEFINICAO DO TEMPLATE A SER UTILIZADO E IMPORTACAO DAS NAMESPACES-->
<ui:composition template="/WEB-INF/templates/Layout.xhtml"
                xmlns="http://www.w3.org/1999/xhtml"
                xmlns:h="http://xmlns.jcp.org/jsf/html"
                xmlns:f="http://xmlns.jcp.org/jsf/core"
                xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
                xmlns:p="http://primefaces.org/ui" >
<!-- ação que sera chamada toda vez que a view for carregada -->
        <f:metadata>
            <f:viewAction action="#{consultaCategoriaBean.consultar}" />
        </f:metadata>


O que for escrito fora do dine nao sera exibido     
        <!-- DEFINICAO DO CORPO -->
    <ui:define name="corpo">
        <h1>Componente Tree Primefaces</h1>

        <h:form id="frmCategorias">
            <p:tree value="#{consultaCategoriaBean.raiz}" 
                    var="cat" 
                    dynamic="true"
                    style="width:700px; height:400px">
                <p:treeNode>
                    <h:outputText value="#{cat}" />
                </p:treeNode>
            </p:tree>
        </h:form>

    </ui:define>
</ui:composition>
    
asked by anonymous 06.04.2015 / 15:55

2 answers

1

What is being displayed is the result of the toString method of objects placed in the tree, because of the following excerpt:

<h:outputText value="#{cat}" />

The above code instructs JSF to convert a Categoria object to text and print the result.

If you want to print a specific attribute, you can do something like this:

<h:outputText value="#{cat.descricao}" />

So if the Categoria class has a String getDescricao() method, it will be invoked and the return value displayed on your page.

    
07.04.2015 / 19:59
0

Thanks for the help!

I was able to find the error.

In the AddNos method instead of passing object category I was passing List Categories.

   //errado
    TreeNode no = new DefaultTreeNode(categorias, pai);

    //correto
    TreeNode no = new DefaultTreeNode(categoria, pai);
    
08.04.2015 / 17:22