Bom dia srs,
Estou com um problema ao montar o meu menu com o core do tomahawk.
Ele apenas monta dois níveis, à partir daí, esquece, nada é mostrado. Vou anexar uma imagem para maiores esclarecimentos do erro.
Meu Managed Bean segue abaixo:
/**
*
*/
package br.com.sofisa.pcfi.adm.mbean;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.myfaces.custom.navmenu.NavigationMenuItem;
import br.com.sofisa.pcfi.adm.business.bo.menu.MenuBO;
import br.com.sofisa.pcfi.adm.vo.menu.MenuVO;
/**
* @author FGuerra
*
*/
public class Menu {
private List<MenuVO> menu_ = null;
private Map sortMenu = null;
/**
* @param menu the menu to set
*/
public void setMenu(List<MenuVO> menu) {
this.menu_ = menu;
}
/**
* Consulta o menu no BD
*/
private void loadMenu() {
MenuBO menuBO = null;
try {
menuBO = new MenuBO();
menu_ = menuBO.getMenu();
}catch(Exception e) {
e.printStackTrace();
}
}
/**
* @return Os ítens do menu que serão iterados pelo tomahawk
*/
@SuppressWarnings("unchecked")
public List<NavigationMenuItem> getMenu() {
List<NavigationMenuItem> menu = null;
Map mMenu = new HashMap();
NavigationMenuItem rootMenu = null;
List<NavigationMenuItem> child = new ArrayList<NavigationMenuItem>();
int aux = -1;
try {
loadMenu();
setSortMenu(menu_);
if(menu_!=null && menu_.size()>0) {
menu = new ArrayList<NavigationMenuItem>();
for(int i=0; i<menu_.size(); i++) {
MenuVO menuVO = menu_.get(i);
if(menuVO.getCdSuperior()==0) {
rootMenu = new NavigationMenuItem(menuVO.getDsMenu(), menuVO.getUrlMenu());
setRootMenu(menu, rootMenu);
addSortMenu(mMenu, menuVO.getIdMenu(), rootMenu);
}else {
if(menuVO.getCdSuperior()!=aux) {
getMenuFilho(menuVO.getCdSuperior(), mMenu, menu_, i);
aux = menuVO.getCdSuperior();
}
}
}
}
}catch(Exception e) {
e.printStackTrace();
}
return menu;
}
@SuppressWarnings("unchecked")
/**
* Método para popular o Map ordenado com os VOs e respectivos identificadores;
* @param menu
*/
private void setSortMenu(List><MenuVO> menu) {
sortMenu = new HashMap();
for(int i=0; i<menu.size(); i++) {
MenuVO itemMenu = (MenuVO) menu.get(i);
sortMenu.put(itemMenu.getIdMenu(), itemMenu);
}
}
/**
* Seta o menu filho no primeiro nível que será apresentado na tela;
* @param menu
* @param childMenu
*/
private void setRootMenu(List><NavigationMenuItem> menu, NavigationMenuItem childMenu) {
menu.add(childMenu);
}
/**
* Adiciona o ítem do menu no Map;
* @param sortMenu
* @param pk
* @param navMenuItem
*/
@SuppressWarnings("unchecked")
private void addSortMenu(Map sortMenu, Integer pk, NavigationMenuItem navMenuItem) {
if(!sortMenu.containsKey(pk))
sortMenu.put(pk, navMenuItem);
}
/**
* Método para resgatar um Item do menu através de seu identificador;
* @param sortMenu
* @param pk
* @return NavigationMenuItem
*/
private NavigationMenuItem getNavMenuItem(Map sortMenu, Integer pk) {
NavigationMenuItem navMenuItem = (NavigationMenuItem) sortMenu.get(pk);
return navMenuItem;
}
/**
* Método para adicionar os filhos ao menu pai;
* @param cdSuperior
* @param mapMenu
* @param menu
* @param indexList
*/
@SuppressWarnings("unchecked")
private void getMenuFilho(int cdSuperior,
Map mapMenu,
List<MenuVO> menu,
int indexList) {
List<NavigationMenuItem> childs = new ArrayList<NavigationMenuItem>();
for(int i = indexList; i<menu.size(); i++) {
MenuVO menuVO = menu.get(i);
//Adiciona o menu ao Map para ser resgatado posteriormente
if(menuVO.getCdSuperior()>0 && "javascript:void(0)".equalsIgnoreCase(menuVO.getUrlMenu())) {
addSortMenu(mapMenu, menuVO.getIdMenu(), new NavigationMenuItem(menuVO.getDsMenu(), menuVO.getUrlMenu()));
}
if(menuVO.getCdSuperior()!=cdSuperior)
break;
childs.add( new NavigationMenuItem(menuVO.getDsMenu(), menuVO.getUrlMenu()) );
}
//Resgata o menu pai
NavigationMenuItem menuPai = getNavMenuItem(mapMenu, cdSuperior);
//Adiciona os filhos no pai
if(menuPai!=null)
menuPai.setNavigationMenuItems(childs);
}
}
O pessoal deve estar sem tempo mesmo!