复选框 ajax 未执行



基本思想是在未选中selectBooleanCheckbox时启用selectManyCheckbox。当我第一次加载页面并取消选中selectBooleanCheckbox时,ajax 中的渲染似乎不起作用,因为selectManyCheckbox仍然处于禁用状态。如何检查出了什么问题?或者我错过了什么?

这发生在我第一次加载页面时,如果我点击按钮并玩复选框突然开始工作。

干杯

    <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>

更新

发布我的支持豆代码,也许你会发现它有问题

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);
    }
}
最后,

在逐步检查我的所有代码后,我意识到两个列表没有初始化。所以问题从这里解决了:

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

对此

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

然后一切都很完美。

最新更新