Jsf PrimeFacesActionButton多次调用
我一直在为一个问题绞尽脑汁,我找不到解决它的方法,在网上也找不到任何相关的东西 我正在使用带有Primefaces的Netbeans来开发JSF web应用程序 除了有时对actionlisteners的调用被执行了好几次之外,一切都正常 例如,这是我的带有primefaces的JSF页面: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">
<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){
...
}