Error when clicking a menu item - Richfaces
marcelcamargos Apr 28, 2011 9:40 AMHi,
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]