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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
...
    <h:commandButton ...>
        <moi:validation .../>
    </h:commandButton>
...
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.
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 :

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);
        }
    }
    ...
Franchement, je n'aime pas cette solution, bien qu'elle marche.
Comment auriez-vous procéder ?