Je ne crois pas qu'il y ait de solution toute prête pour ça...
Une idée : ajouter une méthode Javascript changeInput() qui sera appelée dans les onchange de chaque input présent dans ton tabPanel. Cette méthode mettra simplement un booléen à true.
Par exemple :
1 2 3 4 5 6 7 8 9 10 11 12
| <input type="hidden" id="tabModifiee" value="false"/>
<script type="text/javascript">
function changeInput() {
$("tabModifiee").value = true;
}
function peutChangerDeTab() {
return ($F('tabModifie') != "true") || prompt("Des données ont été modifiées. Voulez-vous quitter l'onglet ?");
}
</script>
...
<h:inputText ... onchange="changeInput();"/> |
Dans le bouton utilisé pour changer l'onglet actuel, tu fais ce code :
... onclick="return peutChangerDeTab();"/>
Explications :
La méthode peutChangerDeTab va retourner true uniquement si la valeur du champ caché tabModifie est différente de true ($F('tabModifie') != "true") - donc que la méthode changeInput() n'a jamais été appelée - ou que l'utilisateur réponde par oui à la popup Javascript (prompt(...)).
Si la méthode peutChangerDeTab retourne false, alors le clic ne sera pas exécuté (i.e. l'utilisateur ne change pas d'onglet). Si elle retourne true, alors l'utilisateur changera d'onglet...
Partager