Je m'arrache les cheveux mais pour l'instant sans résultat.
Voici ce que j'ai tenté de faire, merci aux personnes qui voudront bien me lire:
Mon bean jsf implémente désormais l'interface JobListener:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
@ManagedBean
@ApplicationScoped
public class SettingsBean implements JobListener {
//champs surlequel est lié le <p:selectBooleanButton value="#{settingsBean.running}" de la vue
private boolean running = false;
public boolean isRunning() {
return running;
}
public void setRunning(boolean running) {
this.running = running;
}
// Implémentation des méthodes abstraites de l'interface JobListener
@Override
public void jobExecutionVetoed(JobExecutionContext arg0) {
// TODO Module de remplacement de méthode auto-généré
running = false;
UIComponent serviceStateBooleanButton = (UIComponent) FacesContext
.getCurrentInstance().getViewRoot()
.findComponent("settingsFormId:C7CPIPCtrlBtnId");
System.out.println(serviceStateBooleanButton.toString());
System.out.println("toto");
}
@Override
public void jobToBeExecuted(JobExecutionContext arg0) {
// TODO Module de remplacement de méthode auto-généré
running = true;
System.out.println("running: " + running);
UIComponent serviceStateBooleanButton = (UIComponent) FacesContext
.getCurrentInstance().getViewRoot()
.findComponent("settingsFormId:C7CPIPCtrlBtnId");
System.out.println(serviceStateBooleanButton.toString());
System.out.println("toto");
}
@Override
public void jobWasExecuted(JobExecutionContext arg0,
JobExecutionException arg1) {
// TODO Module de remplacement de méthode auto-généré
running = false;
System.out.println("running: " + running);
UIComponent serviceStateBooleanButton = (UIComponent) FacesContext
.getCurrentInstance().getViewRoot()
.findComponent("settingsFormId:C7CPIPCtrlBtnId");
System.out.println(serviceStateBooleanButton.toString());
System.out.println("toto");
} |
"settingsFormId:C7CPIPCtrlBtnId" est l'identifiant complet du composant "<p:selectBooleanButton" de la vue, c'est-à-dire préfixé par les identifiants de tous les composants implémentant l'interface NamingContainer et séparés par des ":" comme stipulé sur la FAQ JSF Developpez.
J'ai cru naïvement que le changement de la valeur du champs "running" serait suffisant pour synchroniser l'affichage de la valeur de <p:selectBooleanButton" sur ma vue or il n'en est rien.
J'ai donc pensé récupérer mon composant directement sur les méthodes du listener (jobExecutionVetoed, jobToBeExecuted et jobWasExecuted) puis forcer sa valeur.
Malheureusement je me heurte à un comportement bizarre: Tout ce que je vois lorsque est appelée une des méthodes du listener c'est le résultat de l'instruction :
System.out.println("running: " + running);
(lignes 35 et 50) qui est la dernière chose à s’exécuter avant que...rien??? Puisque plus rien du tout après n'est affiché sur la console, cad ni la valeur de
serviceStateBooleanButton.toString();
ni null ni "toto" ni exeption ni rien! 
Quelqu'un peut il m'aider?
Edit: Alors en fait
FacesContext context = FacesContext.getCurrentInstance();
sur les méthodes du listener retourne null, et... je ne sais plus quoi faire
Partager