2012-09-09 1 views
0

저는 문제를 해결하기위한 방법을 찾을 수 없으며 웹에서 관련있는 것을 찾을 수 없습니다.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을 사용하여 응용 프로그램을 개발했습니다.

+0

결과를 반환하지 않으므로 action 속성을 제거 할 수 있습니까? actionListener 만 있으면 충분합니다. 또한 메소드를 public void saveChanges (ActionEvent e)로 변경하십시오. – Ravi

답변

2

action 또는 actionListener 속성 중 하나를 제거해야합니다. 조치를 제거하면

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

행동과의 actionListener

Differences between action and actionListener

의 차이는 당신이 액션 메소드 서명 여기

public void saveChanges(ActionEvent e){ 
... 
} 

처럼

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

을 변경해야합니다 속성

+0

호출중인 메소드에'ActionEvent'가 필요하지 않습니다. 또한 OP는 두 경우의 차이를보기 위해'actionListener'가 아닌'action'을 사용해야합니다. [이 질문] (http://www.stackoverflow.com/questions/3909267/). – siebz0r

+0

네, 바로 내 게시물을 편집했습니다. – erencan

+0

그레이트! 고마워, 내 바보 야. – martin

관련 문제