ActionListener para o componente HtmlPanelMenu do RichFaces

4 respostas
andrezaolps

Olá pessoal… sou novo no desenvolvimento web com JSF e estou com um problema que não consigo resolver a dias. Por favor gostaria muito se alguém pudesse me ajudar… Meu caso é o seguinte, estou criando um menu dinâmico com o componente HtmlPanelMenu do RichFaces via binding no meu bean. O menu está sendo criado perfeitamente, porém não sei como adicionar algum tipo de ActionListener aos menus para disparar algum evento ao clique e redirecionar para alguma página.
Eis o código de criação do menu no bean

public HtmlPanelMenu getPanelMenu() {
	panelMenu = new HtmlPanelMenu();
		
	for(MenuPackageModel mp : getMenuPackageList()) {
		HtmlPanelMenuGroup menuGroup = new HtmlPanelMenuGroup();
		menuGroup.setName(mp.getName());
		menuGroup.setLabel(mp.getName());
		panelMenu.getChildren().add(menuGroup); 
		
		for(Menu menu : mp.getMenuList()) {
			HtmlPanelMenuItem item = new HtmlPanelMenuItem();
			item.setLabel(menu.getName());
			item.setName(menu.getTitle());
			item.setIcon("/menu_icons/" + menu.getIconName());
			
			menuGroup.getChildren().add(item);
		}
	}
	
	return panelMenu;
}

E aqui a forma como o chamo na pagina:

<rich:panelMenu binding="#{mainMenuBean.panelMenu}" />

Gostaria de alguma dica de como seria a melhor maneira de tratar os eventos deste menu.

Muito Obrigado,
André Luiz

4 Respostas

knik

Seu código está certo.
Existe um bug neste com o HtmlPanelMenuItem. Ele aceita um ícone, mas perde o listener.
Para concertar o seu código, remova a linha abaixo que vai funcionar:

item.setIcon("/menu_icons/" + menu.getIconName());

andrezaolps

Muito obrigado por sua resposta amigo! Vou tentar fazer dessa forma.
Valeu
ALPS

knik

Perdão,
Não é bug, acontece que o componente é muit sensível, então, cuidado com o que vem do seu banco de dados.
Ao invés de remover a linha que mencionei, faça assim:

item.setIcon("/menu_icons/" + menu.getIconName().trim());

Perceba que assim estamos removento espaços “extras” da string que contém a url do ícone.
Faça a mesma coisa para as linhas abaixo:

item.setLabel(menu.getName().trim()); item.setName(menu.getTitle().trim());

Eu tive este problema e custei socucionar. Os menus renderizavam, mas ficavam “travados” e não obedeciam aos comandos. Fazendo isto, resolvi o problema, pois percebi que vinham “espaços em branco” ao final de cada string do banco de dados. Mas o problema só acontecia com a string do icone.

andrezaolps

Hum verdade! Eu estava tendo este problema tambem e o .trim() nos valores do banco resolveram tudo. Uma coisa que percebi também é que se usar-mos character varying() ao invés de varchar os valores não vêm com espaço no final…

Muito Obrigado!
ALPS

Criado 8 de julho de 2009
Ultima resposta 8 de ago. de 2009
Respostas 4
Participantes 2