0 Replies Latest reply on Apr 28, 2011 9:40 AM by Marcel Camargos

    Error when clicking a menu item - Richfaces

    Marcel Camargos Newbie

      Hi,

       

      My code builds the menu perfectly. But, when I click a menu item the item screen doesn't open. Could you tell me, pls, how could I solve this problem?

       

      The codes follow below:

       

       

      [code]

       

      <rich:panelMenu

      event="onclick"

      mode="none"

      label="Menu"

      iconCollapsedGroup="triangle"

      iconExpandedGroup="triangleDown"

      expandSingle="true"

      binding="#{ItemMenuDinamicoBB.itensMenu}>

      </rich:panelMenu>

       

      [/code]

       

       

       

       

      ItemMenuDinamicoBB.java

       

      [code]

       

       

      package br.com.sigalivre.faces.beans;

       

       

      import br.com.sigalivre.service.exception.ServiceException;

      import br.com.sigalivreweb.faces.GenericBB;

      import br.com.sigalivre.model.pojo.ItemMenu;

      import br.com.sigalivre.model.pojo.Sistema;

      import br.com.sigalivre.model.pojo.UsuarioSistema;

      import br.com.sigalivre.services.ItemMenuService;

      import br.com.sigalivre.service.util.SegurancaService;

      import br.com.sigalivre.service.util.ServiceFactory;

      import br.com.sigalivre.service.SessionService;

      import br.com.sigalivre.util.MessageUtils;

      import br.com.sigalivre.util.StringUtils;

      import java.util.ArrayList;

      import java.util.HashMap;

      import java.util.List;

      import java.util.Map.Entry;

      import javax.faces.component.UIComponent;

      import org.ajax4jsf.component.html.HtmlActionParameter;

      import org.richfaces.component.html.HtmlPanelMenu;

      import org.richfaces.component.html.HtmlPanelMenuGroup;

      import org.richfaces.component.html.HtmlPanelMenuItem;

       

       

      /**

      * Bean para a criação de menu dinâmico

      *

      * @author <Thiago Camargos Lopes thiagocamargos@gmail.com>

      */

      public class ItemMenuDinamicoBB extends GenericBB<ItemMenu> {

       

       

          private HtmlPanelMenu itensMenu;

       

       

          @Override

          protected ItemMenuService getService() {

              return (ItemMenuService) ServiceFactory.getService(ItemMenuService.class);

          }

       

       

          /**

           * Retorna um componente html que contém os menus gerados dinamicamente

           *

           * @return

           * @throws ServiceException

           */

          public HtmlPanelMenu getItensMenu() {

              if (itensMenu != null) {

                  return itensMenu;

              }

              itensMenu = new HtmlPanelMenu();

       

       

              try {

                  final List<UIComponent> childrenMenus = itensMenu.getChildren();

       

       

                  //buscando o usuário logado

                  final UsuarioSistema usuario = SessionService.getUsuarioLogado(SessionService.getCurrent());

                  final Sistema sistemaSessao = SessionService.getSistema(SessionService.getCurrent());

                  final ItemMenuService itemMenuService = SegurancaService.getItemMenuService();

                  final List<ItemMenu> itensMenuCriados = new ArrayList<ItemMenu>();

       

       

                  //buscando os itens de menu daquele usuário

                  final ArrayList<ItemMenu> itensMenuByUsuario = (ArrayList<ItemMenu>) itemMenuService.findAllItensMenuByUsuario(usuario, sistemaSessao);

       

       

                  //separando os itens de menu por sistema.

                  final HashMap<Sistema, List<ItemMenu>> map = new HashMap<Sistema, List<ItemMenu>>();

                  for (ItemMenu im1 : itensMenuByUsuario) {

                      final Sistema key = im1.getSistema();

       

       

                      List<ItemMenu> list = map.get(key);

                      if (list == null) {

                          list = new ArrayList<ItemMenu>();

                          map.put(key, list);

                      }

                      list.add(im1);

                  }

       

       

                  //Criando um HtmlPanelMenuGroup por sistema

                  for (Entry<Sistema, List<ItemMenu>> entry : map.entrySet()) {

                      final HtmlPanelMenuGroup sistema = new HtmlPanelMenuGroup();

                      final List<UIComponent> childrenSistema = sistema.getChildren();

                      final List<ItemMenu> itensMenuDoSistema = entry.getValue();

                      final String nomeSistema = entry.getKey().getNomeSistema();

                      sistema.setLabel(nomeSistema);

                      sistema.setName(nomeSistema);

                      sistema.setExpanded(true);

       

       

                      //Criando os grupos de itens de menu desse sistema

                      for (ItemMenu im2 : itensMenuDoSistema) {

                          final List<ItemMenu> filhosDoItemMenu = itemMenuService.getFilhos(im2, itensMenuDoSistema);

                          //Se não é folha

                          if (filhosDoItemMenu.size() > 0) {

                              //então cria um HtmlPanelGroup pra ele

                              final HtmlPanelMenuGroup subGroup = new HtmlPanelMenuGroup();

                              final List<UIComponent> children = subGroup.getChildren();

                              final String nomeSubGroup = im2.getNomeItemMenu();

                              subGroup.setLabel(nomeSubGroup);

                              subGroup.setName(nomeSubGroup);

                              subGroup.setExpanded(true);

                              StringBuffer onClick;

      //                        subGroup.setValue(nomeSubGroup);

       

       

                              String urlItemMenu = im2.getUrlItemMenu();

                              if (!StringUtils.isEmpty(urlItemMenu)) {

                                  onClick = new StringBuffer("document.location.href=\'");

                                  onClick.append(urlItemMenu.trim());

                                  onClick.append('\'');

                                  subGroup.setOnclick(onClick.toString());

                              }

       

       

                              //e busca os filhos e cria um HtmlPanelMenuItem pra cada filho

                              for (ItemMenu filho : filhosDoItemMenu) {

                                  final HtmlPanelMenuItem itemFilho = new HtmlPanelMenuItem();

       

       

                                  final String nomeFilho = filho.getNomeItemMenu();

                                  itemFilho.setLabel(nomeFilho.trim());

                                  itemFilho.setName(nomeFilho.trim());

                                  urlItemMenu = filho.getUrlItemMenu();

      //                            itemFilho.setValue(nomeFilho);

       

       

       

       

       

                                  if (!StringUtils.isEmpty(urlItemMenu)) {

                                      onClick = new StringBuffer("document.location.href=\'");

                                      onClick.append(urlItemMenu.trim());

                                      onClick.append('\'');

                                      itemFilho.setOnclick(onClick.toString());

                                  }

       

       

                                  //itemFilho.setId(nomeFilho);

       

       

                                  children.add(itemFilho);

       

       

                                  //Como ele já apareceu dentro de outro menu, vamos removar da lista de menus

                                  //que será reaproveitada mais tarde

                                  itensMenuCriados.add(filho);

                              }

       

       

                              //adicionando o subgrupo no grupo do sistema

                              childrenSistema.add(subGroup);

                              itensMenuCriados.add(im2);

                          }

       

       

                      }

       

       

                      System.out.println("MARCEL " + itensMenuCriados.size());

       

       

                      itensMenuDoSistema.removeAll(itensMenuCriados);

                      itensMenuCriados.clear();

                      //Criando os items folhas do item de menu desse sistema

                      for (ItemMenu m : itensMenuDoSistema) {

                          final HtmlPanelMenuItem item = new HtmlPanelMenuItem();

                          final String nomeItemMenu = m.getNomeItemMenu();

                          item.setLabel(nomeItemMenu.trim());

                          item.setName(nomeItemMenu.trim());

                          final String urlItemMenu = m.getUrlItemMenu();

                          if (!StringUtils.isEmpty(urlItemMenu)) {

                              final StringBuffer onClick = new StringBuffer("document.location.href=\'");

                              onClick.append(urlItemMenu.trim());

                              onClick.append('\'');

                              item.setOnclick(onClick.toString());

       

       

                          }

                          childrenSistema.add(item);

                      }

                      childrenMenus.add(sistema);

                  }

       

       

              } catch (ServiceException e) {

                  setShowMessagePesquisa(true);

                  addError(MessageUtils.getMessage("system.exception.erroMenu"));

              }

              return itensMenu;

          }

       

       

          public void setItensMenu(HtmlPanelMenu itensMenu) {

              this.itensMenu = itensMenu;

          }

       

       

      }

       

       

       

      [/code]