public Menubar getMenuBar(
      List<OpcionSistemaDto> listaOpcionMenu, List<PermisoRolDto> listaPermisos) throws Exception {
    listaOpcionMenu.remove(new OpcionSistemaDto(0L));
    Menubar menuBar = new Menubar();
    Submenu subMenu = null;
    MenuItem menuItem = null;

    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");

    for (OpcionSistemaDto opcionMenuDto : listaOpcionMenu) {
      opcionMenuDto.setPermiso(obtenerPermiso(listaPermisos, opcionMenuDto).getEstado());
      if (opcionMenuDto.getPadreDto() == null || opcionMenuDto.getPadreDto().getId().equals(0L)) {
        List<OpcionSistemaDto> hijos = opcionSistemaManager.obtenerHijosMenu(opcionMenuDto);
        UtilCore.General.ordena(hijos, "orden");
        if (hijos.size() > 0) {
          if (opcionMenuDto.getPermiso()) {
            subMenu = new Submenu();
            subMenu.setId(
                ConstantesCore.VARIABLE_ID_MENU + String.valueOf(opcionMenuDto.getId().intValue()));
            subMenu.setLabel(
                UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDto.getValue())
                    .toUpperCase());
            subMenu.setIcon(opcionMenuDto.getIcon());
            subMenu.setStyle(applicationMBean.getEstiloMenu());
            cargarHijos3(opcionMenuDto, subMenu, listaPermisos);
            menuBar.getChildren().add(subMenu);
          }

        } else {
          if (opcionMenuDto.getPermiso()) {
            menuItem = new MenuItem();
            menuItem.setId(
                ConstantesCore.VARIABLE_ID_MENU_ITEM
                    + String.valueOf(opcionMenuDto.getId().intValue()));
            menuItem.setValue(
                UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDto.getValue())
                    .toUpperCase());

            menuItem.setIcon(opcionMenuDto.getIcon());
            menuItem.setOnclick(opcionMenuDto.getOnClick());
            if (opcionMenuDto.getAction() != null && opcionMenuDto.getAction().length() > 0) {
              menuItem.setAction(
                  FacesContext.getCurrentInstance()
                      .getApplication()
                      .createMethodBinding(opcionMenuDto.getAction(), new Class[] {}));
            } else {
              menuItem.setUrl(opcionMenuDto.getUrl());
            }

            menuItem.setInView(true);
            menuItem.setStyle(applicationMBean.getEstiloMenu());
            menuItem.setAjax(false);
            menuBar.getChildren().add(menuItem);
          }
        }
      }
    }
    return menuBar;
  }
  private void cargarHijos3(
      OpcionSistemaDto opcionMenuDto2, Submenu subMenu2, List<PermisoRolDto> listaPermisos)
      throws Exception {
    MenuItem menuItem = null;
    Submenu subMenuHijo = null;
    ApplicationMBean applicationMBean =
        (ApplicationMBean)
            WebServletContextListener.getApplicationContext().getBean("applicationMBean");
    List<OpcionSistemaDto> hijos1 = opcionSistemaManager.obtenerHijosMenu(opcionMenuDto2);
    UtilCore.General.ordena(hijos1, "orden");
    for (OpcionSistemaDto opcionMenuDtoHijo : hijos1) {
      opcionMenuDtoHijo.setPermiso(obtenerPermiso(listaPermisos, opcionMenuDtoHijo).getEstado());
      List<OpcionSistemaDto> hijos = opcionSistemaManager.obtenerHijosMenu(opcionMenuDtoHijo);
      UtilCore.General.ordena(hijos, "orden");
      if (hijos.size() >= 1) {
        if (opcionMenuDtoHijo.getPermiso()) {
          subMenuHijo = new Submenu();
          subMenuHijo.setId(
              ConstantesCore.VARIABLE_ID_MENU
                  + String.valueOf(opcionMenuDtoHijo.getId().intValue()));
          subMenuHijo.setLabel(
              UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDtoHijo.getValue())
                  .toUpperCase());
          subMenuHijo.setIcon(opcionMenuDtoHijo.getIcon());
          subMenuHijo.setStyle(applicationMBean.getEstiloMenu());
          cargarHijos3(opcionMenuDtoHijo, subMenuHijo, listaPermisos);
          subMenu2.getChildren().add(subMenuHijo);
        }
      } else {
        if (opcionMenuDtoHijo.getPermiso()) {
          menuItem = new MenuItem();
          menuItem.setId(
              ConstantesCore.VARIABLE_ID_MENU_ITEM
                  + String.valueOf(opcionMenuDtoHijo.getId().intValue()));
          menuItem.setValue(
              UtilCore.Internacionalizacion.getMensajeInternacional(opcionMenuDtoHijo.getValue())
                  .toUpperCase());
          menuItem.setUrl(opcionMenuDtoHijo.getUrl());
          menuItem.setIcon(opcionMenuDtoHijo.getIcon());
          menuItem.setOnclick(opcionMenuDtoHijo.getOnClick());
          menuItem.setStyle(applicationMBean.getEstiloMenu());
          if (opcionMenuDtoHijo.getAction() != null && opcionMenuDtoHijo.getAction().length() > 0) {
            menuItem.setAction(
                FacesContext.getCurrentInstance()
                    .getApplication()
                    .createMethodBinding(opcionMenuDtoHijo.getAction(), new Class[] {}));
          } else {
            menuItem.setUrl(opcionMenuDtoHijo.getUrl());
          }

          menuItem.setInView(true);
          menuItem.setAjax(false);
          subMenu2.getChildren().add(menuItem);
        }
      }
    }
  }