bonjour,
Je souhaiterais mettre le focus sur un des champs qui n'ont pas passé tout les étape de validation jsf, est ce que vous avez une idée sur comment je pourrais faire ca?
Version imprimable
bonjour,
Je souhaiterais mettre le focus sur un des champs qui n'ont pas passé tout les étape de validation jsf, est ce que vous avez une idée sur comment je pourrais faire ca?
tu utilises quels jeux de composants?
j'utilise richface.
tu peux utiliser l'attribut focus du composant support, et, le lier à un attribut d'un bean.
utiliser un ajaxlistener, il est invoqué après la phase validation et conversion, tu peux donc, vérifier s'il y' a un message d'erreur dans la FaceContext, prendre l'id du composant et le mettre dans l'attribut du bean.
je m'excuse de ne pas tous comprendre ... comment peut ont récupérer les id des compostant n'ayant pas réussi l'étape de la validation.
merci ...
tu peux utiliser ses méthodes là :
Pour trouver les messages par un clientId:Code:
1
2
3
4 FacesContext f = FacesContext.getCurrentInstance(); // retourne les clientsId Iterator<String> messages = f.getClientIdsWithMessages();
Code:Iterator<FacesMessage> messages = f.getMessages(clientId)
Peux-ton faire la même chose pour isefaces ?
re salut
je voulais remercier pour votre aide, il me reste plus que le déclenchement du focus au bon moment .
jessai de le fair avec rich:jquery
avec comme methode pour recupeer le Id :Code:<rich:jQuery query="focus()" timing="onload" selector="#{bean.invalideId}" rendered="#{!(empty dataBean.invalideId)}" />
mais malheureusement ca ne marche pas même si le code source de la page devrais bien fonctionner.Code:
1
2
3
4
5
6
7
8
9
10
11 public String getInvalideId() { FacesContext currentInstance = FacesContext.getCurrentInstance(); Iterator<String> clientIdsWithMessages = currentInstance.getClientIdsWithMessages(); if (clientIdsWithMessages.hasNext()) { String next = clientIdsWithMessages.next(); System.out.println("invalide id : " + next); return "#"+next; } return null; }
a4j:support et a4j:commandButton disposent d'un attribut focus que tu peux lier à ton champs du bean via les EL.
Je te recommande d'utiliser la solution de Sniper37 et d'utiliser l'attribut focus.
Toutefois, pour ton information, le selector de jQuery doit prendre un ID complet. Ainsi :
Code:
1
2 <h:form id="myForm"> <h:inputText id="myField" ...>
l'ID du champ est "myForm:myField". Toutefois, si tu passes cet ID directement à jQuery, il ne va rien trouver. Il faut en effet (doublement) échapper le caractère ":". Ainsi au lieu de faire :
il te faudra faire :Code:jQuery("#myForm:myField").focus();
Dans ton code Java, tu pourras faire :Code:jQuery("#myForm\\:myField").focus();
(attention de bien mettre 4 \ pour au final en avoir bien 2)Code:return "#" + next.replaceAll(":", "\\\\:");
ca marche impeccable avec deux \\... merci pour votre aide..