Pessoal,
O meu codigo monta o menu perfeitamente. Entretanto, quando eu clico em um item do menu a tela nao abre e nao acontece nada. Alguem poderia me ajudar a resolver esse problema, por favor?
O codigos seguem abaixo:
menu.xhtml
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:rich="http://richfaces.org/rich" >
<ui:fragment>
<rich:panel style="height:560px">
<rich:panelMenu
event="onclick"
mode="none"
label="Menu"
iconCollapsedGroup="triangle"
iconExpandedGroup="triangleDown"
expandSingle="true"
binding="#{ItemMenuDinamicoBB.itensMenu}">
</rich:panelMenu>
</rich:panel>
</ui:fragment>
</html>
ItemMenuDinamicoBB.java
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.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
*
*/
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;
String urlItemMenu = im2.getUrlItemMenu();
if (!StringUtils.isEmpty(urlItemMenu)) {
onClick = new StringBuffer("document.location.href=\'");
onClick.append(urlItemMenu);
onClick.append('\'');
subGroup.setOnclick(onClick.toString());
}
//e busca os filhos e cria um HtmlPanelMenuItem pra cada filhos
for (ItemMenu filho : filhosDoItemMenu) {
final HtmlPanelMenuItem itemFilho = new HtmlPanelMenuItem();
final String nomeFilho = filho.getNomeItemMenu();
itemFilho.setLabel(nomeFilho);
itemFilho.setName(nomeFilho);
urlItemMenu = filho.getUrlItemMenu();
if (!StringUtils.isEmpty(urlItemMenu)) {
onClick = new StringBuffer("document.location.href=\'");
onClick.append(urlItemMenu);
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);
}
}
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);
item.setName(nomeItemMenu);
final String urlItemMenu = m.getUrlItemMenu();
if (!StringUtils.isEmpty(urlItemMenu)) {
final StringBuffer onClick = new StringBuffer("document.location.href=\'");
onClick.append(urlItemMenu);
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;
}
}