J'ai créé un composant validation qui se charge de lancer une fonction Javascript quand l'utilisateur clique sur un bouton.
En HTML, je fais simplement l'ajout sur l'attribut onclick du bouton le code Javascript checkValidation().
En JSF, ça s'écrit comme ça :
Dans le code du composant, je peux sans problème récupérer le parent de mon composant, et lui ajouter ce que je veux dans le onclick.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... <h:commandButton ...> <moi:validation .../> </h:commandButton> ...
Le souci, c'est qu'il me faut modifier l'attribut onclick du commandButton avant que celui-ci ne soit "rendu" (que sa méthode encodeBegin()) ne soit appelée.
En effet, si je fais ma modification dans l'encodeBegin() de mon composant, modifier l'attribut onclick du bouton ne sert à rien, vu que encodeBegin() du bouton a déjà été appelé (donc le bouton est déjà "rendu").
La seule façon que j'ai trouvé pour l'instant pour résoudre mon problème est assez porc : Je surcharge la méthode la méthode setParent de mon composant comme ça :
Franchement, je n'aime pas cette solution, bien qu'elle marche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 ... @Override public void setParent(UIComponent parent) { super.setParent(parent); if ((parent != null) && (parent instanceof UICommand)) { modifyOnclickAttribute(parent); } } ...
Comment auriez-vous procéder ?
Partager