Acessar um metodo usando actionListener

12 respostas
vcsmetallica

Galera,

Estou usando tendado acessar um metodo dentro do meu bean.

Não estou conseguindo, não da erro nem nada.
Estou tentando de dentro da minha p:layoutUnit
Ja coloquei dentro de form e nada.

exemplo:

<p:layoutUnit id="top" position="north" size="50" >
                    <h:commandButton actionListener="#{themeSwitcherBean.menu}" value="Teste 2" />
 </p:layoutUnit>

12 Respostas

D

Tente colocar dentro de um <h:form>

vcsmetallica

Eu coloquei e funcionou.
mas quando eu coloco assim não funciona:

<h:form id="tableViewFormId" prependId="false">
                        <p:menubar>
                            

                            <p:submenu label="Edit" icon="ui-icon-pencil">
                                <p:menuitem value="Undo" url="#" icon="ui-icon-arrowreturnthick-1-w" id="novo" actionListener="#{themeSwitcherBean.menu}"></p:menuitem>
                                <p:menuitem value="Redo" url="#" icon="ui-icon-arrowreturnthick-1-e" ></p:menuitem>
                            </p:submenu>

                        </p:menubar>
Hebert_Coelho

Leia esse post para entender a diferença entre action e action listener: JSF Mini Livro - Dicas, conceitos e boas práticas.

Tentou colocar o form dentro do menubar? ou do submenu?

Leonardo_Gaona

O componente menuBar já cria um elemento na view.

Remova o atributo url dos menuitem. Se estiver com URL o actionListener ou o action não é invocado. Aliás não seria melhor você colocar esses commandButtons em um <p:panel>?

Espero ter ajudado :wink:

Hebert_Coelho

Leonardo Gaona:
O componente menuBar já cria um elemento na view.
De onde vc tirou essa informação? Eu li a documentação do primefaces aqui na parte do menuBar e não tinha nada sobre isso.

vcsmetallica

Galera, Eu resolvi aqui usando o componente p:menuButton ficou mais feinho, mas esta bom.

Valeu galera pela força.

<p:layoutUnit id="top" position="north" size="50" >
                    <h:form id="tableViewFormId" prependId="false">
                        <h:panelGrid columns="2">
                            <p:menuButton value="Cadastros">  
                                <p:menuitem value="Save"  icon="ui-icon-disk" id="novo" actionListener="#{themeSwitcherBean.menu}" update=":formCenter:painel"/>  
                                <p:menuitem value="Update"   icon="ui-icon-arrowrefresh-1-w" />  
                                <p:menuitem value="Delete" icon="ui-icon-close"  ajax="false"/>  
                                <p:separator />  
                                <p:menuitem value="Homepage" url="http://www.primefaces.org" icon="ui-icon-extlink" />  
                            </p:menuButton>
                            <p:menuButton value="Mapa">
                                <p:menuitem value="Mapa" id="mapa" actionListener="#{themeSwitcherBean.menu}" update=":formCenter:painel" />  
                            </p:menuButton>
                        </h:panelGrid>
                    </h:form>
                </p:layoutUnit>
Leonardo_Gaona

Basta olhar o HTML gerado por um menuBar dentro de uma página. Todo o componente do menu fica aninhado dentro de um form próprio, independente de haver ou não um form externo. Componentes que precisam ser envolvidos por um form são descritos na documentação. O menuButton por exemplo:

CommandButton usage is similar to standard commandButton, by default commandButton submits
its enclosing form with ajax.

Abraço

Hebert_Coelho

Basta olhar o HTML gerado por um menuBar dentro de uma página. Todo o componente do menu fica aninhado dentro de um form próprio, independente de haver ou não um form externo. Componentes que precisam ser envolvidos por um form são descritos na documentação. O menuButton por exemplo:

CommandButton usage is similar to standard commandButton, by default commandButton submits
its enclosing form with ajax.

AbraçoEu olhei aqui no exemplo do primefaces e não vi isso, pelo contrário só vi o form que foi declarado no código:

O exemplo que analisei foi: http://primefaces.org/showcase/ui/menubar.jsf

Leonardo_Gaona

No exemplo não é gerado um form por já existir um envolvendo os menus. Inserindo um menubar em uma view que não possua um form declarado, ao checar o HTML gerado pode-se ver que o primefaces cria um form para o menuBar

Hebert_Coelho
Leonardo Gaona:
No exemplo não é gerado um form por já existir um envolvendo os menus. Inserindo um menubar em uma view que não possua um form declarado, ao checar o HTML gerado pode-se ver que o primefaces cria um form para o menuBar
Criei um exemplo aqui usando apenas menubar e não achei o form, onde o form deveria ser criado? Eu não estou conseguindo achar: [img]http://img5.imageshack.us/img5/8863/76555101.png[/img] [img]http://img812.imageshack.us/img812/408/94054544.png[/img]
<!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:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>aSecretaria</title>
    </h:head>

    <h:body>
        <p:menubar>
           <p:submenu label="Edit" icon="ui-icon-pencil">
               <p:menuitem value="Undo" url="#" icon="ui-icon-arrowreturnthick-1-w" id="novo" actionListener="#{themeSwitcherBean.menu}"></p:menuitem>
               <p:menuitem value="Redo" url="#" icon="ui-icon-arrowreturnthick-1-e" ></p:menuitem>
           </p:submenu>

       </p:menubar>
    </h:body>
</html>
Leonardo_Gaona

O Facelets me pregou uma peça. Havia um form declarado dentro da div header do meu layout.

Peço desculpas pela informação incorreta :oops:

Hebert_Coelho

Leonardo Gaona:
O Facelets me pregou uma peça. Havia um form declarado dentro da div header do meu layout.

Peço desculpas pela informação incorreta :oops:

tranquilo.
Eu estranharia o fato dele criar form automático pois ele poderia acabar aninhando form o que seria um grande problema.

Criado 20 de novembro de 2012
Ultima resposta 21 de nov. de 2012
Respostas 12
Participantes 4