Personnellement, je procèderais comme suit :
Je mets un <h:inputHidden> qui va stocker un booléen correspondant au résultat du save.
Je mets à jour cette valeur dans la méthode save(), et je la rafraichi sur la page (reRender).
Enfin, dans le oncomplete, je checke cette valeur.
Ce qui devrait donner quelque chose comme ça :
1 2 3 4 5 6 7 8 9 10 11 12
| private String resultSave; // Avec getter et setter.
public String save() {
...
if (error) {
this.resultSave = "false";
return "failed";
} else {
this.resultSave = "true";
return "success";
}
} |
Et dans le JSF :
1 2 3 4 5
| <h:form id="myForm">
...
<h:inputHidden id="resultatSave" value="#{monBean.resultSave}"/>
...
<a4j:commandButton reRender="resultSave" ... oncomplete="if ($F('myForm:resultatSave') == 'true')) { Richfaces.hideModalPanel('...'); }"/> |
Explication :
if ($F('myForm:resultatSave') == 'true')) { Richfaces.hideModalPanel('...'); }
signifie que si la valeur du champ dont l'ID est myForm:resultatSave (donc la valeur du inputHidden) est à "true", alors ça signifie que l'action save s'est bien déroulé, et donc que je peux fermer le popup. Sinon, je ne fais rien.
Pour information, $F("idField") est équivalent à document.getElementById("idField").value en Javascript, grâce à Prototype (qui est utilisé par Richfaces).
Partager