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

最後に、すべてのコードを段階的にチェックした後、2 つのリストが初期化されていないことに気付きました。したがって、問題はこれから変更して解決しました:

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 に答える