2012-06-06 44 views
0

基本思路是啓用selectManyCheckboxselectBooleanCheckbox未檢查。當我第一次加載頁面和取消選中selectBooleanCheckbox在Ajax中的渲染似乎沒有工作,因爲selectManyCheckbox保持禁用狀態。我怎樣才能檢查什麼是錯的?或者我錯過了什麼?CheckBox ajax未執行

剛剛我第一次加載頁面時會發生這種情況,如果我點擊按鈕並突然彈出複選框,它就開始工作。

乾杯,

<h:form id="formActualizacionCubo"> 
     <rich:panel id="panelActualizacionCubo" 
        style="width: 350px"> 
      <f:facet name="header"> 
       <h:outputText value="Administracion Cubo de Información PEC"/> 
      </f:facet> 

      <h:outputLabel for="selectDependenciasCubo" 
          value="Actualizar TODO el Cubo de informacion?"/> 
      <h:selectBooleanCheckbox id="selectDependenciasCubo" 
            value="#{administrationBean.actualizaTodasDependencias}"> 
       <f:ajax event="click" 
         listener="#{administrationBean.doClearCuboLabels}" 
         render="opcionesDependenciasCubo seleccionDependencias messageActualizaCubo actualizacionCuboCorrecta"/> 
      </h:selectBooleanCheckbox> 

      <a4j:outputPanel id="opcionesDependenciasCubo"> 
       <h:selectManyCheckbox id="seleccionDependencias" 
             layout="pageDirection" required="true" 
             requiredMessage="Seleccione al menos una dependencia." 
             disabled="#{administrationBean.actualizaTodasDependencias}" 
             value="#{administrationBean.dependenciasPorActualizar}"> 
        <f:selectItems value="#{administrationBean.dependenciasOpciones}"/> 
        <f:ajax event="click" 
          listener="#{administrationBean.doClearCuboLabels}" 
          render="messageActualizaCubo actualizacionCuboCorrecta"/> 
       </h:selectManyCheckbox> 
       <rich:message id="messageActualizaCubo" 
           for="seleccionDependencias"/> 
      </a4j:outputPanel> 
      <h:panelGrid columns="3"> 
       <a4j:commandButton id="btnActualizaCubo" value="Actualizar Cubo PEC" 
            render="messageActualizaCubo actualizacionCuboCorrecta @this" 
            onbegin="this.disabled=true; 
            document.getElementById('formActualizacionCubo:imgProcesandoCubo').style.display='block'" 
            oncomplete="this.disabled=false; 
            document.getElementById('formActualizacionCubo:imgProcesandoCubo').style.display='none'" 
            action="#{administrationBean.doActualizaCubo}"/> 
       <h:panelGroup/> 
       <h:graphicImage id="imgProcesandoCubo" url="img/imgLoading.gif" 
           style="display: none"/> 
      </h:panelGrid> 
      <a4j:outputPanel id="actualizacionCuboCorrecta" style="font-size: 14px; color: #D17100"> 
       <h:outputText rendered="#{administrationBean.actualizacionCuboCorrectaLabelRendered}" 
           value="Actualización correcta !"/> 
       <h:outputText rendered="#{administrationBean.actualizacionCuboFalloLabelRendered}" 
           value="Fallo la actualización !"/> 
      </a4j:outputPanel> 
     </rich:panel> 
    </h:form> 

UPDATE

帖子我支持bean的代碼,也許你能找到的東西錯了,

private HashMap<String, String> dependencias; 
private boolean actualizaTodoCuboChecked = true; 
private List<String> dependenciasOpciones; 
private List<String> dependenciasPorActualizar; 
private boolean actualizacionCuboCorrectaLabelRendered = false; 
private boolean actualizacionCuboFalloLabelRendered = false; 

public boolean isActualizaTodoCuboChecked() { 
    return actualizaTodoCuboChecked; 
} 

public void setActualizaTodoCuboChecked(boolean actualizaTodoCuboChecked) { 
    this.actualizaTodoCuboChecked = actualizaTodoCuboChecked; 
    dependenciasPorActualizar.clear(); 
} 

public List<String> getDependenciasOpciones() { 
    return dependenciasOpciones; 
} 

public void setDependenciasOpciones(List<String> dependenciasOpciones) { 
    this.dependenciasOpciones = dependenciasOpciones; 
} 

public List<String> getDependenciasPorActualizar() { 
    return dependenciasPorActualizar; 
} 

public void setDependenciasPorActualizar(List<String> dependenciasPorActualizar) { 
    this.dependenciasPorActualizar = dependenciasPorActualizar; 
} 

public boolean isActualizacionCuboCorrectaLabelRendered() { 
    return actualizacionCuboCorrectaLabelRendered; 
} 

public boolean isActualizacionCuboFalloLabelRendered() { 
    return actualizacionCuboFalloLabelRendered; 
} 

public void doClearCuboLabels(){ 
    actualizacionCuboCorrectaLabelRendered = false; 
    actualizacionCuboFalloLabelRendered = false; 
} 

public void doActualizaCubo() { 
    if (actualizaTodoCuboChecked) { 
     //Actualiza todas las dependencias 
     //actualizacionCuboCorrectaLabelRendered = db.actualizarCuboInformacion(dependenciasOpciones); 
    } else { 
     //Actualiza solo las dependencias seleccionadas 
     //actualizacionCuboCorrectaLabelRendered = db.actualizarCuboInformacion(dependenciasPorActualizar); 
    } 
    actualizacionCuboCorrectaLabelRendered = true; //Eliminar esta fila cuando se descomenten las llamadas en el IF-ELSE 
    actualizacionCuboFalloLabelRendered = !actualizacionCuboCorrectaLabelRendered; 
} 

private void loadDependenciesFromXML() { 
    XStream reader = new XStream(new DomDriver()); 
    reader.alias("root", Map.class); 
    dependencias = 
      (HashMap<String, String>) reader.fromXML(new File(ROOT_DIR + "/confFiles/dependencias.xml")); 
    dependenciasOpciones = new ArrayList<String>(); 
    for (String s : dependencias.keySet()) { 
     dependenciasOpciones.add(s); 
    } 
} 

回答

0

最後檢查我的所有代碼一步一步之後我意識到這兩個列表並未初始化。所以,問題得到有效解決由此發生變化:

private List<String> dependenciasOpciones; 
private List<String> dependenciasPorActualizar; 

這個

private List<String> dependenciasOpciones = new ArrayList<String>(); 
private List<String> dependenciasPorActualizar = new ArrayList<String>(); 

,然後一切工作完美。