Renderizar 2 combos e 1 table

2 respostas
serjaumfantin

Olá pessoal,

fiz aquele esquema dos combos aninhados do tipo País/Estados. Agora eu preciso renderizar uma tabela(tableParametros) com os PARÂMETROS relacionandos à CATEGORIA scolhida. Do jeito que tá, meu código não mostra a tabela. Assim que o primeiro combo(categoria) for clicado é pra que o segundo combo(subcategoria) e a table (tableParametros) sejam renderizados. Vou colocar o código.

Obs: os dois combos estão funcionando certinho, assim que um é escolhido, o segundo mostra somente os itens relacionados ao item escolhido no primeiro combo.

XHTML ---------------

<f:view>
       <h:form acceptcharset="UTF-8">

       <fieldset>
           <legend>Cadastro Categoria</legend>

           <h:panelGrid columns="1">

               <!--  categorias -->
               <h:outputLabel for="categoria" value="Categoria " styleClass="rotulos" />
               <h:selectOneMenu id="categoria"    value="#{categoriaFace.categoria.id}" rendered="true">
                   <f:selectItems value="#{categoriaFace.categorias}" />
                   <a4j:support event="onchange" ajaxSingle="true" action="#{categoriaFace.actionCarregaSubcategoriasByCategoria}" reRender="categoria,subcategoria" />
               </h:selectOneMenu>

               <!-- subcategorias -->
               <h:outputLabel for="subcategoria" value="Subcategoria" styleClass="rotulos" />
               <h:selectOneMenu id="subcategoria" value="#{categoriaFace.subCategoria.id}" rendered="true">
                   <f:selectItems value="#{categoriaFace.subCategorias}" />
               </h:selectOneMenu>

               <f:verbatim><br /></f:verbatim>

               <a4j:support event="onchange" reRender="tableParametros" action="#{categoriaFace.parametrosByCategoria}" ajaxSingle="true"/>

               <!-- parametros -->
               <rich:dataTable value="#{categoriaFace.parametros}" var="parametro" rendered="#{not empty categoriaFace.parametros}" rows="5" id="tableParametros" width="30%" cellspacing="0" cellpadding="0" border="1">
                   <h:column>
                       <f:facet name="header">
                           <h:outputText value="NOME" />
                       </f:facet>
                       <h:outputText value="#{parametro.nome}" />
                   </h:column>

                   <f:facet name="footer">
                       <rich:datascroller />
                   </f:facet>

               </rich:dataTable>

           </h:panelGrid></fieldset>
       </h:form>
   </f:view>
MB --------------
public class CategoriaFace {

   private Categoria categoria = new Categoria();

   private SubCategoria subCategoria = new SubCategoria();

   private List<SelectItem> subCategorias = new ArrayList<SelectItem>();

   private List<Parametro> parametros = new ArrayList<Parametro>();

   public String actionCarregaSubcategoriasByCategoria(){
       this.subCategorias = getSubcategoriasByCategoria(this.getCategoria().getId());

       return "getSubcategoriasByCategoriaSucesso";
   }

   public List<SelectItem> getSubcategoriasByCategoria(longidCategoria){
       Session session = HibernateUtil.currentSession();
       CategoriaDAO dao = new CategoriaDAO(session);

       List<SubCategoria> subcategorias = dao.pesquisaSubcategoriasByCategoriaId(idCategoria);
       List<SelectItem> items = new ArrayList<SelectItem>(subcategorias.size());

       System.out.println("getSubcategoriasByCategoria() invocado!");

       for(SubCategoria subcat : subcategorias){
           items.add(new SelectItem(subcat.getId(), subcat.getNome()));
       }

       System.out.println("items >>> " + items);

       return items;
   }

   public List<SelectItem> getCategorias(){
       Session session = HibernateUtil.currentSession();
       CategoriaDAO dao = new CategoriaDAO(session);

       List<Categoria> lc = dao.loadAll();
       List<SelectItem> items = new ArrayList<SelectItem>(lc.size());

       for(Categoria cat : lc){
           items.add(new SelectItem(cat.getId(), cat.getNome()));
       }

       System.out.println("getCategorias() invocado!");

       System.out.println("items >>> " + items);

       return items;
   }

   public String getParametrosByCategoria(){
       Session session = HibernateUtil.currentSession();
       CategoriaDAO dao = new CategoriaDAO(session);

       parametros = dao.pesquisaParametrosByCategoriaId(this.getCategoria().getId());

       System.out.println("lista params >>> " + parametros);

       System.out.println("categoria >>> " + this.getCategoria().getId());

       return "pesquisaCategoriaSucesso";
   }

Valew

2 Respostas

javax.skol

provavelmente pq seu categoriaFace.parametros esta vazio e vc colocou pra ele renderizar apenas se não for vazio… :?

serjaumfantin

Aham… é isso mesmo. Ele tá vindo vazio porque o id da subcategoria não está sendo setado. E os categoriaFace.parametros dependendem desse id pra fazer a busca. Vou bolar um mecanismo aqui pra setar esse id.

Se tive alguma coisa em mente, poste ae…

Abraços…

Criado 12 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 2
Participantes 2