基本的な考え方は、 がチェックされていないときselectManyCheckbox
にを有効にすることです。最初にページをロードしてチェックを外すと、無効のままであるため、ajax でのレンダリングが機能していないようです。何が問題なのかを確認するにはどうすればよいですか? または、何が欠けていますか?selectBooleanCheckbox
selectBooleanCheckbox
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>
アップデート
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);
}
}