Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf PrimeFacesActionButton多次调用_Jsf_Button_Primefaces_Command_Action - Fatal编程技术网

Jsf PrimeFacesActionButton多次调用

Jsf PrimeFacesActionButton多次调用,jsf,button,primefaces,command,action,Jsf,Button,Primefaces,Command,Action,我一直在为一个问题绞尽脑汁,我找不到解决它的方法,在网上也找不到任何相关的东西 我正在使用带有Primefaces的Netbeans来开发JSF web应用程序 除了有时对actionlisteners的调用被执行了好几次之外,一切都正常 例如,这是我的带有primefaces的JSF页面: <h:body> <ui:composition template="home.xhtml"> <ui:define name="content">

我一直在为一个问题绞尽脑汁,我找不到解决它的方法,在网上也找不到任何相关的东西

我正在使用带有Primefaces的Netbeans来开发JSF web应用程序

除了有时对actionlisteners的调用被执行了好几次之外,一切都正常

例如,这是我的带有primefaces的JSF页面:

<h:body>
   <ui:composition template="home.xhtml">

        <ui:define name="content">
            <h2>Administración de alertas SMS</h2>


                    <p:panel id="display">

                        <p:selectBooleanCheckbox itemLabel="Enviar alertas SMS" value="#{smsConfigBean.alertsEnabled}"/>

                        <p>
                        <h:outputText value="Mensaje de Texto: " /><br /><br />
                        <p:inputTextarea rows="5" cols="50" counterTemplate="{0} caracteres restantes." counter="counter" maxlength="160" value="#{smsConfigBean.smsMessage}" id="smsMessage"/>
                        <br />
                        <h:outputText id="counter" />
                        </p>

                        <p>   
                        <h:outputText value="Dispositivo de envio SMS: " />  
                        <p:selectOneRadio id="options" value="#{smsConfigBean.usePhone}">  
                            <f:selectItem itemLabel="Modem USB"  itemValue="false" />  
                            <f:selectItem itemLabel="Telefono Android" itemValue="true" />                                        
                        </p:selectOneRadio>  
                        </p>
                        <br />
                        <p:tabView id="tabView">  

                            <p:tab id="tab1" title="Modem USB">  
                                <h:panelGrid id="modemGrid" columns="2" cellpadding="4">  
                                    <h:outputText value="Puerto: " />  
                                    <p:inputText id="port" value="#{smsConfigBean.port}"/>  

                                    <h:outputText value="Bit Rate (Opcional): " />  
                                    <p:inputText id="bitRate" value="#{smsConfigBean.bitRate}"/>  

                                    <h:outputText value="Nombre de modem (Opcional): " />  
                                    <p:inputText id="modemName" value="#{smsConfigBean.modemName}"/>

                                    <h:outputText value="PIN: " />  
                                    <p:inputText id="pin" value="#{smsConfigBean.modemPin}"/>

                                    <h:outputText value="Centro de Mensajes: " />  
                                    <p:inputText id="smsc" value="#{smsConfigBean.SMSC}"/>                                  
                                </h:panelGrid>
                            </p:tab>  

                            <p:tab id="tab2" title="Telefono Android">  

                                 <h:panelGrid id="phoneGrid" columns="2" cellpadding="4">  
                                    <h:outputText value="Path ADB:" />  
                                    <p:inputText id="adbPath" value="#{smsConfigBean.adbPath}"/>  

                                    <h:outputText value="Directorio de Configuracion:" />  
                                    <p:inputText id="configPath" value="#{smsConfigBean.configPath}"/>  

                                    <h:outputText value="Modo de conexion " />  
                                    <p:selectOneRadio id="connectOptions" value="#{smsConfigBean.useWifi}">  
                                        <f:selectItem itemLabel="USB" itemValue="false"/>  
                                        <f:selectItem itemLabel="WiFi" itemValue="true" />                                        
                                    </p:selectOneRadio>  

                                    <h:outputText value="Direccion IP (Solo para WiFi): " />  
                                    <p:inputText id="ipDir" value="#{smsConfigBean.ipDir}"/>  

                                </h:panelGrid> 
                            </p:tab>  

                        </p:tabView> 


                    </p:panel>

                    <br />
                    <p:commandButton id="saveSmsAlerts" value="Guardar" update="messages" action="#{smsConfigBean.saveChanges}" actionListener="#{smsConfigBean.saveChanges}"/>



        </ui:define>

    </ui:composition>
</h:body>
}

问题是,当通过点击命令按钮“saveSmsAlerts”保存此表单的更改时,调用被执行了两次。导致咆哮信息也显示两次。 (您将看不到咆哮组件,因为它是在模板中定义的)

这也发生在我为使用fileuploader上传文件的同一个应用程序所做的另一个页面中。文件上传4次


我正在使用chrome来测试应用程序,并使用netbeans来开发它。

您应该删除action或actionListener属性中的一个

<p:commandButton id="saveSmsAlerts" value="Guardar" update="messages" action="#{smsConfigBean.saveChanges}"/>
下面是action和actionListener之间的区别


您是否可以删除操作属性,因为您没有返回结果。仅actionListener就足够了。同时将该方法更改为public void saveChanges(ActionEvent e)。调用的方法中不需要
ActionEvent
。此外,OP应该使用
action
在这种情况下,而不是
actionListener
来查看两者之间的差异,请参见。
<p:commandButton id="saveSmsAlerts" value="Guardar" update="messages" action="#{smsConfigBean.saveChanges}"/>
<p:commandButton id="saveSmsAlerts" value="Guardar" update="messages"  actionListener="#{smsConfigBean.saveChanges}"/>
public void saveChanges(ActionEvent e){
...
}