Jsf 2 CommandButton未启动ActionListener

Jsf 2 CommandButton未启动ActionListener,jsf-2,primefaces,Jsf 2,Primefaces,好的,我这里有个问题。我有一个baseTemplate.xhtml: <!DOCTYPE html> <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:p="http://primefaces.org/ui" xmlns:f="http://java.

好的,我这里有个问题。我有一个baseTemplate.xhtml:

<!DOCTYPE html>
<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:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core">

<h:head>
    <!-- Incluir Scripts e Folhas de Estilo comuns a todas as páginas do sistema -->
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />        
    <h:outputStylesheet library="css" name="default.css"/>
    <h:outputStylesheet library="css" name="cssLayout.css"/>
    <h:outputStylesheet library="css" name="rodape.css"/>


    <title>SisEventos - Sistema de Gerenciamento de Eventos</title>
</h:head>
<h:body>
    <div class="estrutura">
        <div class="top">
        </div>

        <div class="menu">
            <!-- <ui:insert name="menu"> -->
            <h:form id="frmMenu"> 
                <p:menubar autoDisplay="true" >
                    <p:menuitem value="Home" icon="ui-icon-home" url="/paginas/home.xhtml" /> 

                    <p:submenu label="Manutenção" icon="ui-icon-person"> 
                        ...
                    </p:submenu> 

                    <p:submenu label="Atividades" > 
                        ...
                    </p:submenu> 

                    <p:submenu label="Relatórios" > 
                        ...
                    </p:submenu> 

                    <p:submenu label="Evento" > 
                        ...
                    </p:submenu> 

                    <p:menuitem value="Contato" /> 
                </p:menubar>
            </h:form>
        </div>

        <div class="left_content">
            <ui:insert name="content">
            </ui:insert>
        </div>

        <div class="bottom">
           ...
        </div>
    </div>  
</h:body>

我的问题是:不会调用地籍到操作侦听器!似乎commandButton不起作用!可能有什么问题?

将命令按钮更改为

并从支持bean中的函数中删除ActionEvent参数。

我了解到在对话框中放置表单是一种很好的做法。如果你这样做,你应该 注意不要嵌套表单。所以把它从你现在的表格“frmEventos”中去掉

我想actionlistener现在将被调用

看看这条线:


...
函数handleAction(xhr、状态、参数){
如果(参数关闭){
dlgNovo.hide();
}
}

这个答案究竟是如何解释和解决OP的具体问题的?还是这只是一种猜测/暗中刺伤?@Ronald91我已经照你说的做了,但没有用!至少对我来说,这似乎与两个表单组件冲突,一个在baseTemplate.xhtml中,另一个在gerenciareventotest.xhtml中
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition 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:p="http://primefaces.org/ui"
            template="./../../resources/templates/baseTemplate.xhtml">

<ui:define name="content">
    <!-- Configuração do idioma de exibição do scheduler -->
    <h:outputScript library="scripts" name="primefaces-locale.js"/>
    <p:fieldset legend="Gerenciar eventos">

        <h:form id="frmEventos">
            <!-- Exibição de mensagens gerais -->
            <p:growl id="gMessages" sticky="false" globalOnly="true" />

            <p:schedule id="schedEventos" 
                        value="#{eventoBeanTeste.listaEventos}" 
                        widgetVar="schEventos" locale="pt">
                <p:ajax event="eventSelect" 
                        listener="#{eventoBeanTeste.onEventSelect}" 
                        update="frmEventos"
                        oncomplete="dlgNovo.show();"/>
                <p:ajax event="dateSelect" 
                        listener="#{eventoBeanTeste.onDateSelect}"
                        update="frmEventos"
                        oncomplete="dlgNovo.show();"/>
            </p:schedule>

            <p:dialog id="dlgNovoEvento" 
                      widgetVar="dlgNovo" 
                      modal="true" 
                      header="Novo evento"
                      resizable="false" 
                      draggable="true">
                <p:panelGrid id="pgNovoEvento" columns="1" styleClass="gridNoLine">
                    <p:row>
                        <p:messages id="mNovoMessages" redisplay="false"/>
                    </p:row>

                    ...

                    <p:row>
                        <p:commandButton value="Cancelar"
                                         immediate="true"
                                         onclick="dlgNovo.hide();"/>

                        <p:commandButton id="cbNovoSalvar" 
                                         value="Salvar" 
                                         actionListener="#{eventoBeanTeste.cadastrarEvento}"
                                         oncomplete="schEventos.update(); handleAction(xhr, status, args);" 
                                         update="@form frmEventos:gMessages"/>
                    </p:row>
                </p:panelGrid>
            </p:dialog>
        </h:form>

    </p:fieldset>

    <script type="text/javascript">
        function handleAction(xhr, status, args){
            if(args.close){
                dlgNovo.hide();
            }
        }
    </script>
</ui:define>
@ManagedBean(name = "eventoBeanTeste")
@SessionScoped
public class EventoBeanTeste {

    ...

    // Listener de cadastro de evento
    public void cadastrarEvento(ActionEvent e) {
        MessageHelper.showGlobalMessage("Fired!", FacesMessage.SEVERITY_INFO);
    }
    ...
}
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition 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:p="http://primefaces.org/ui"
        template="./../../resources/templates/baseTemplate.xhtml">

<ui:define name="content">
    <!-- Configuração do idioma de exibição do scheduler -->
    <h:outputScript library="scripts" name="primefaces-locale.js"/>
    <p:fieldset legend="Gerenciar eventos">

            <p:dialog id="dlgNovoEvento" 
                  widgetVar="dlgNovo" 
                  modal="true" 
                  header="Novo evento"
                  resizable="false" 
                  draggable="true">
                <h:form>
                     <p:panelGrid id="pgNovoEvento" columns="1" styleClass="gridNoLine">
                         <p:row>
                             <p:messages id="mNovoMessages" redisplay="false"/>
                         </p:row>

                          ...

                         <p:row>
                             <p:commandButton value="Cancelar"
                                         immediate="true"
                                         onclick="dlgNovo.hide();"/>

                             <p:commandButton id="cbNovoSalvar" 
                                     value="Salvar" 
                                     actionListener="#{eventoBeanTeste.cadastrarEvento}"
                                     oncomplete="schEventos.update(); handleAction(xhr, status, args);" 
                                     update="@form frmEventos:gMessages"/>
                         </p:row>
                 </p:panelGrid>
            </h:form>
        </p:dialog>

        <h:form id="frmEventos">
            <!-- Exibição de mensagens gerais -->
            <p:growl id="gMessages" sticky="false" globalOnly="true" />

            <p:schedule id="schedEventos" 
                    value="#{eventoBeanTeste.listaEventos}" 
                    widgetVar="schEventos" locale="pt">
                <p:ajax event="eventSelect" 
                    listener="#{eventoBeanTeste.onEventSelect}" 
                    update="frmEventos"
                    oncomplete="dlgNovo.show();"/>
                <p:ajax event="dateSelect" 
                    listener="#{eventoBeanTeste.onDateSelect}"
                    update="frmEventos"
                    oncomplete="dlgNovo.show();"/>
            </p:schedule>


        </h:form>

    </p:fieldset>

    <script type="text/javascript">
        function handleAction(xhr, status, args){
            if(args.close){
                dlgNovo.hide();
            }
        }
    </script>
</ui:define>