0

基本思想是在未选中selectManyCheckbox时启用。当我第一次加载页面并取消选中ajax中的呈现似乎不起作用,因为仍然禁用。我怎样才能检查出什么问题?或者我错过了什么?selectBooleanCheckboxselectBooleanCheckboxselectManyCheckbox

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

干杯,

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

更新

贴出我的Backing 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);
    }
}
4

1 回答 1

0

最后一步一步检查了我所有的代码后,我意识到这两个列表没有被初始化。所以问题得到了解决,从这个改变:

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

对此

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

然后一切都很完美。

于 2012-06-12T23:19:57.863 回答