JSF + RichFaces + Menu Dinamico

11 respostas
F

EU estou usando JSF 1.2 + RichFaces

eu tenho q montar um menu dinamico que sera montado a partir de dados do banco de dados

algume conhece uma maneira de fazer o menu com RichFaces Dinamico?

Valeu

Obrigado

11 Respostas

Ferryman

Eai,

Eu tenho algo parecido aqui… Quando o usuário loga na aplicação eu consulto o banco para verificar suas permissoes. De acordo com elas eu vou criando no proprio backingBean a estrutura do menu, e no final jogo o menu na sessão. Ai nos meus jsps eu acesso ele com binding="#{sessionScope.menu}".

[]s
Ferry

F

Tem como me mandar o exemplo???

Valeu

jayro

Ferryman:
Eai,

Eu tenho algo parecido aqui… Quando o usuário loga na aplicação eu consulto o banco para verificar suas permissoes. De acordo com elas eu vou criando no proprio backingBean a estrutura do menu, e no final jogo o menu na sessão. Ai nos meus jsps eu acesso ele com binding="#{sessionScope.menu}".

[]s
Ferry

Ferry,

vc poderia manda um exemplo ? To numa briga grande tá com três semanas e nada de concreto. Estático ficou legal, mas o dinâmico não sai…

:frowning:

vlw !

Marques

eae jayro,

ve se te ajuda (Funciona, porem se vc encontrar uma forma melhor, compartilhe comigo):

Meu Managed Bean:
@Controller("menuMB")
@Scope("session")
public class MenuMB {
	private HtmlPanelMenu panelMenu;
	
	@Autowired
	private MenuService menuService;

	public HtmlPanelMenu getPanelMenu() {
		List<Menu> aListN1 = new ArrayList<Menu>();
		panelMenu = new HtmlPanelMenu();
		
		panelMenu.setIconExpandedGroup("disc");
		panelMenu.setIconCollapsedGroup("disc");
		panelMenu.setIconExpandedTopGroup("chevronUp");
		panelMenu.setIconGroupTopPosition("right");
		panelMenu.setIconCollapsedTopGroup("chevronDown");

		try {
			aListN1 = menuService.listByQuery("FROM Menu m WHERE m.parent IS NULL");
		} catch (Exception e) {
			e.printStackTrace();
		}

		for (Menu m1 : aListN1) {
			HtmlPanelMenuGroup menuGroup = new HtmlPanelMenuGroup();
			menuGroup.setName(m1.getLabel());
			menuGroup.setLabel(m1.getLabel());
			List<Menu> aListN2 = menuService.listByQuery("FROM Menu m WHERE m.parent.id = '" + m1.getId() + "'");
			for (Menu m2 : aListN2) {
				
				if (!m2.getUrl().equals("")) {
					HtmlPanelMenuItem itemN2 = new HtmlPanelMenuItem();
					itemN2.setLabel(m2.getLabel());
					itemN2.setName(m2.getId().toString());
					itemN2.setValue(m2.getLabel());
					itemN2.setActionExpression(getOutcome(m2.getUrl()));
					menuGroup.getChildren().add(itemN2);
				} else {
					HtmlPanelMenuGroup itemN2 = new HtmlPanelMenuGroup();
					itemN2.setName(m2.getId().toString());
					itemN2.setLabel(m2.getLabel());
					menuGroup.getChildren().add(itemN2);
					List<Menu> aListN3 = menuService.listByQuery("FROM Menu m WHERE m.parent.id = '" + m2.getId() + "'");
					for (Menu m3 : aListN3) {
						HtmlPanelMenuItem itemN3 = new HtmlPanelMenuItem();
						itemN3.setLabel(m3.getLabel());
						itemN3.setName(m3.getId().toString());
						itemN3.setActionExpression(getOutcome(m3.getUrl()));

						itemN2.getChildren().add(itemN3);
					}
					menuGroup.getChildren().add(itemN2);
				}
			}
			panelMenu.getChildren().add(menuGroup);
		}

		return panelMenu;
	}

	public void setPanelMenu(HtmlPanelMenu panelMenu) {
		this.panelMenu = panelMenu;
	}
	
	public MethodExpression getOutcome(String outcome) {
		FacesContext fc = FacesContext.getCurrentInstance();
		ELContext ec = fc.getELContext();	
		return fc.getApplication().getExpressionFactory().createMethodExpression(ec, "#{" + outcome + "}", String.class, new Class[] {});
	}	
}
Meu xhtml
?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com.jsf/core"
	xmlns:a4j="http://richfaces.org/a4j"
	xmlns:rich="http://richfaces.org/rich">

<ui:composition template="/templates/template.xhtml">
	<ui:define name="left">
		<rich:panelMenu binding="#{menuMB.panelMenu}" mode="ajax" />
	</ui:define>
	<ui:define name="right">
	</ui:define>
</ui:composition>
</html>
jayro

Marques,

eu consegui colocar pra rodar o negócio… Assim que eu tiver um tempinho, posto aquí… o mais provável que seja amanhã quando terei uma folguinha…

:slight_smile:

Kleber-rr

jayro:
Marques,

eu consegui colocar pra rodar o negócio… Assim que eu tiver um tempinho, posto aquí… o mais provável que seja amanhã quando terei uma folguinha…

:)

Eae, já teve uma folga pra poder postar o codigo?? :smiley: Flws

jayro

Amanhã… sem falta.

:slight_smile:

Kleber-rr

jayro:
Amanhã… sem falta.

:)

Aguardo. Valeu.

D

Marques… espero pongas todo el codigo que hiciste… seria de gran ayuda, puesto que estoy intentando hacer un menu dinamico con rich:panelmenu y quise ejecutar el codigo que tienes, pero faltan importaciones, la clase menuService. bueno espero puedas ayudarme…

B

Eu estou precisando fazer algo parecido, mas este codigo ai ja virou lenda…
flw ai galera…

chayimamaral

Kleber-rr:

Eae, já teve uma folga pra poder postar o codigo?? :smiley: Flws

Meu, bom dia. Rachei o bico com este post… O cara em 30/10/2009 disse que “amanha eu posto”; daí no dia 22/01/2010 vc pergunta se ele ja teve a folga pra postar. No mesmo dia, ele diz que “amanhã sem falta” e hoje já é 12/07/2011 e nada. Ele tem um problema sério com ‘tempo’ ou ‘datas’.

Criado 22 de agosto de 2007
Ultima resposta 12 de jul. de 2011
Respostas 11
Participantes 8