저는 문제를 해결하기위한 방법을 찾을 수 없으며 웹에서 관련있는 것을 찾을 수 없습니다.Primefaces actionbutton을 여러 번 호출했습니다.
저는 Primefaces가있는 Netbeans를 사용하여 JSF 웹 응용 프로그램을 개발하고 있습니다.
때로는 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>
그리고 이것은 내 백엔드 콩입니다 :
패키지 콩;
import helper.Global; import javax.faces.bean.ManagedBean; import javax.faces.bean.SessionScoped; 해당 명령 'saveSmsAlerts에게'전화를 쳐서이 양식의 변경 사항을 저장할 때
@ManagedBean는 공용 클래스 SmsConfigBean을 @SessionScoped {
private Boolean alertsEnabled; private Boolean usePhone; private Boolean useWifi; private String port; private int bitRate; private String modemName; private String modemPin; private String SMSC; private String adbPath; private String configPath; private String ipDir; private String smsMessage; public SmsConfigBean() { alertsEnabled = Global.getAlertsEnabled(); port = Global.getPort(); bitRate = Global.getBitRate(); modemName = Global.getModemName(); modemPin = Global.getModemPin(); SMSC = Global.getSMSC(); usePhone = Global.getUsePhone(); adbPath = Global.getAdbPath(); configPath = Global.getConfigPath(); useWifi = Global.getUseWifi(); ipDir = Global.getIpDir(); smsMessage = Global.getSmsMessage(); } public Boolean getAlertsEnabled() { return alertsEnabled; } public void setAlertsEnabled(Boolean alertsEnabled) { this.alertsEnabled = alertsEnabled; } public String getPort() { return port; } public void setPort(String port) { this.port = port; } public int getBitRate() { return bitRate; } public void setBitRate(int bitRate) { this.bitRate = bitRate; } public String getModemName() { return modemName; } public void setModemName(String modemName) { this.modemName = modemName; } public String getModemPin() { return modemPin; } public void setModemPin(String modemPin) { this.modemPin = modemPin; } public String getSMSC() { return SMSC; } public void setSMSC(String SMSC) { this.SMSC = SMSC; } public Boolean getUsePhone() { return usePhone; } public void setUsePhone(Boolean usePhone) { this.usePhone = usePhone; } public String getAdbPath() { return adbPath; } public void setAdbPath(String adbPath) { this.adbPath = adbPath; } public String getConfigPath() { return configPath; } public void setConfigPath(String configPath) { this.configPath = configPath; } public Boolean getUseWifi() { return useWifi; } public void setUseWifi(Boolean useWifi) { this.useWifi = useWifi; } public String getIpDir() { return ipDir; } public void setIpDir(String ipDir) { this.ipDir = ipDir; } public String getSmsMessage() { return smsMessage; } public void setSmsMessage(String smsMessage) { this.smsMessage = smsMessage; } public void saveChanges(){ Global.setSmsMessage(smsMessage); Global.setIpDir(ipDir); Global.setUseWifi(useWifi); Global.setConfigPath(configPath); Global.setAdbPath(adbPath); Global.setUsePhone(usePhone); Global.setSMSC(SMSC); Global.setModemPin(modemPin); Global.setModemName(modemName); Global.setBitRate(bitRate); Global.setPort(port); Global.setAlertsEnabled(alertsEnabled); Global.sendInfoResponseMessage("Cambios guardados con exito"); }
은}
문제는 두 번 이루어지고 있는지 . 울부 짖음 메시지가 두 번 표시됩니다. (템플릿에 정의되었으므로 으르렁 대기 구성 요소가 표시되지 않음)
이 문제는 fileuploader를 사용하여 파일을 업로드하는 동일한 앱에서 사용한 다른 페이지에서도 마찬가지입니다. 파일 업로드 4 회 !!
저는 크롬을 사용하여 응용 프로그램을 테스트하고 netbeans을 사용하여 응용 프로그램을 개발했습니다.
결과를 반환하지 않으므로 action 속성을 제거 할 수 있습니까? actionListener 만 있으면 충분합니다. 또한 메소드를 public void saveChanges (ActionEvent e)로 변경하십시오. – Ravi