Primefaces, menuitem, fazer submenu aparecer e desaparecer com clique no tema do menu!
Olá Caros Amigos,
Have a nice day!
O meu problema é o seguinte: estou usando a biblioteca Primefaces para construir a interface gráfica de um sistema, e o meu objetivo é usar um dos recursos disponíveis para fazer aparecer e desaparecer um submenu, quando um dos temas do menu é clicado. O problema é que não está funcionando usando commandButton. O meu objetivo é clicar no menu item com id="produtos" e ao fazer isso ele aciona a ação no coomandButton que alterará o atributo de visibilidade no menu com id="menuItensDeCadastro".
Se alguém souber alguma outra forma melhor de resolver este problema, eu agradeço. O meu problema central é, fazer um submenu aparecer com um clique num dos temas do menu, e desaparecer se outro é dado no mesmo tema.
Segue abaixo o meu código fonte:
Este é um bean criado pra testar mesmo a funcionalidade antes de fazer o código final, por isso coloquei um nome bem ilário.
Foi adicionado ao tópico as imagens do menu sem o clique no tema Produto e depois de clicado como deve ficar!
Imagem do menu sem o clique no tema Produto:
[img]http://javafree.uol.com.br/files_user/files/2/24/84/menu.JPG[/img]
Imagem do menu e seu submenu, é assim que deve ficar depois de clicar em Produto:
[img]http://javafree.uol.com.br/files_user/files/1/69/EA/telaComsubmenu.png[/img]
Obrigado por sua atenção se leu este post e não se interessou em me ajudar!
MUITO Obrigado a você se leu este post e dedicou uma parte do seu tempo a me ajudar postando uma sugestão de solução!
Atenciosamente![img][/img]
<h:body> <h:form class="menuLogon"> <h:panelGrid columns="2"> <p:menu> <p:submenu styleClass="submenu" label="Nome_do_Usuário"> <p:menuitem styleClass="menuitem" value="Carrinho de Compras" /> <p:menuitem styleClass="menuitem" value="Meus Pedidos" /> <p:menuitem styleClass="menuitem" value="Meus dados" /> <p:menuitem styleClass="menuitem" value="Sair" /> </p:submenu> <p:submenu styleClass="submenu" label="Livraria"> <p:menuitem styleClass="menuitem" value="Configurar Livraria" /> <p:menuitem styleClass="menuitem" value="Mídias Pendentes" /> <p:menuitem type="button" id="produtos" styleClass="menuitem" value="Produtos" onclick="mostrarOuEsconderMenuItensDeCadastro()"/> <p:menuitem styleClass="menuitem" value="Temas" /> <p:menuitem styleClass="menuitem" value="Relatórios" /> <p:menuitem styleClass="menuitem" value="Anúncios" /> </p:submenu> <p:submenu styleClass="submenu" label="Clientes"> <p:menuitem styleClass="menuitem" value="Clientes" /> <p:menuitem styleClass="menuitem" value="Simular Cliente" /> <p:menuitem styleClass="menuitem" value="Pedidos" /> </p:submenu> </p:menu> <!-- ESTE É O MENU QUE DEVE APARECER E DESAPARECER NA TELA COM UM CLIQUE NO menuitem com id="produtos" --> <p:menu id="menuItensDeCadastro" styleClass="menuItensDeCadastro" rendered="#{gamb.mostrarMenuItensDeCadastro}"> <p:menuitem styleClass="menuitem" value="" rendered="false" /><!-- Não alterar!!! --> <p:menuitem styteClass="menuitem" value="Cadastrar Produto" /> <p:menuitem styteClass="menuitem" value="Consultar Produto" /> </p:menu> <p:remoteCommand process="@this" name="mostrarOuEsconderMenuItensDeCadastro" update="menuItensDeCadastro"> <f:setPropertyActionListener target="#{gamb.mostrarMenuItensDeCadastro}" value="#"/> </p:remoteCommand> </h:panelGrid> </h:form> </h:body>
import java.io.Serializable; import javax.faces.bean.ManagedBean; import javax.faces.bean.RequestScoped; @ManagedBean(name="gamb") @RequestScoped public class Gambiarra implements Serializable{ private boolean mostrarMenuItensDeCadastro = false; public boolean getMostrarMenuItensDeCadastro() { mostrarOuEsconderMenu2(); return mostrarMenuItensDeCadastro; } public void setMostrarMenuItensDeCadastro(boolean mostrarMenuItensDeCadastro) { this.mostrarMenuItensDeCadastro = mostrarMenuItensDeCadastro; } /*private void mostrarOuEsconderMenu() { // TODO Auto-generated method stub if(mostrarMenuItensDeCadastro == "hidden"){ setMostrarMenuItensDeCadastro("visible"); }else{ setMostrarMenuItensDeCadastro("hidden"); } }*/ private void mostrarOuEsconderMenu2() { // TODO Auto-generated method stub if(mostrarMenuItensDeCadastro == false){ setMostrarMenuItensDeCadastro(true); }else{ setMostrarMenuItensDeCadastro(false); } } }

Alexandre Cunha
Curtidas 0
Respostas

Okabe Rintarou
24/04/2013
Tem como colocar um print da tela, para melhor analise.
E ver:
http://www.primefaces.org/showcase/ui/megaMenu.jsf
http://www.primefaces.org/showcase/ui/tieredMenu.jsf
http://www.primefaces.org/showcase/ui/menubutton.jsf
GOSTEI 0

Alexandre Cunha
24/04/2013
[quote="ElPsyCongroo"]Tem como colocar um print da tela, para melhor analise.
E ver:
http://www.primefaces.org/showcase/ui/megaMenu.jsf
http://www.primefaces.org/showcase/ui/tieredMenu.jsf
http://www.primefaces.org/showcase/ui/menubutton.jsf
Oi ElPsy,
Eu adicionei as imagens do menu sem o clique como deve ficar, e depois que eu clico como deve ficar!
Obrigado por tentar me ajudar, sua atenção é bem vinda!
Atenciosamente,
Alexandre.
GOSTEI 0

Alexandre Cunha
24/04/2013
[quote="AlexSCJava"][quote="ElPsyCongroo"]Tem como colocar um print da tela, para melhor analise.
E ver:
http://www.primefaces.org/showcase/ui/megaMenu.jsf
http://www.primefaces.org/showcase/ui/tieredMenu.jsf
http://www.primefaces.org/showcase/ui/menubutton.jsf
Oi ElPsy,
Eu adicionei as imagens do menu sem o clique como deve ficar, e depois que eu clico como deve ficar!
Obrigado por tentar me ajudar, sua atenção é bem vinda!
Atenciosamente,
Alexandre. GOSTEI 0

Davi Costa
24/04/2013
Já pensou em fazer essa solução em js? Ou Jquery?
Apesar de que, vc pode trar a ação do seu menu para renderizar seus outros itens.
olha essa discussão:
http://stackoverflow.com/questions/9153328/primefaces-2-menuitem-action-actionexpression-or-actionlistener
abcs
GOSTEI 0

Alexandre Cunha
24/04/2013
Olá Caros amigos,
Boa tarde!
Consegui resolver meu problema! Eu tive que mascarar o funcionamente de um overlayPanel para que ele fizesse o que eu quero. Ficou assim:
Então eu só tive que ir lá no css e retirar o panel que aparece no fundo, deixar apenas o conteúdo, que é o menu, colocando no lugar onde eu quero.
A vantagem de fazer assim, é que eu consegui resolver o problema facilmente, de aparecer e desaparecer um submenu, e além disso consegui aplicar alguns efeitos.
A desvantagem de fazer assim, é que nem todo efeito aplicado ao panel funcionará com o menu. E isso prende o código.
Ainda pretendo descobrir um melhor jeito de trabalhar com isso!
Obrigado a todos que me ajudaram!
Abraço!
<p:overlayPanel id="menuOverlayPanel" styleClass="menuOverlayPanel" showEvent="mouseover click" showEffect="drop" hideEvent="mousedown" hideEffect="drop" for="produtos" > <p:menu id="menuItensDeCadastro" styleClass="menuItensDeCadastro"> <p:menuitem styleClass="menuitem" value="" rendered="false" /><!-- Não alterar!!! --> <p:menuitem styteClass="menuitem" value="Cadastrar Produto" /> <p:menuitem styteClass="menuitem" value="Consultar Produto" /> </p:menu> </p:overlayPanel>
GOSTEI 0

Alexandre Cunha
24/04/2013
Show de bola, muito elgal que conseguiu resolver o problema e postou a solução pra galera :)
GOSTEI 0