IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[Primeface 4.0] <p:selectBooleanButton et listener quartz


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut [Primeface 4.0] <p:selectBooleanButton et listener quartz
    Hello les gens,
    Est il possible d'envisager de lier la valeur affichées sur un à un listener d'un job quartz ?
    Pour info pour ceux ne connaîtraient pas quartz, le listener en question correspond grosso modo à un ensemble de méthodes qui vont être lancées dépendamment du status du job, lorsque celui-ci va s’exécuter, lorsque celui-ci a fait l'objet d'un véto, ou qu'il s'est exécuté.
    Il s'agirait pour moi de changer la valeur du booléen lié au <p:selectBooleanButton puis de répercuter cela sur ce que celui-ci affiche.
    Des pistes pour réaliser cela?

    Merci pour toutes vos contributions.

  2. #2
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    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:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    serviceStateBooleanButton.toString();
    ni null ni "toto" ni exeption ni rien!

    Quelqu'un peut il m'aider?
    Edit: Alors en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext context = FacesContext.getCurrentInstance();
    sur les méthodes du listener retourne null, et... je ne sais plus quoi faire

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    Suite de mes aventures avec FacesContext:
    J'ai pensé à sauvegarder le context dans un attribut de mon bean jsf juste avant de lancer mon job quartz:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public class SettingsBean implements JobListener {
    private FacesContext context;
    ...
    Méthode du bean jsf lançant le job:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    context = FacesContext.getCurrentInstance();
    ...
    Pour voir ce qu'il contient une fois une des méthodes du listener lancée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    @Override
    	public void jobToBeExecuted(JobExecutionContext arg0) {
     
     
     
    		System.out.println("context: " + context);
    		UIViewRoot uiViewRoot = new UIViewRoot();
    		try {
    			uiViewRoot = context.getViewRoot();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		System.out.println("uiViewRoot: " + uiViewRoot);
    		UIComponent uiComponent = (UIComponent) uiViewRoot
    				.findComponent("settingsFormId:C7CPIPCtrlBtnId");
    		System.out.println("uiComponent: " + uiComponent);
    	}
    J'ai découvert que l'instruction ligne 10:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uiViewRoot = context.getViewRoot();
    une fois entourée d'un bloc try catch lançait une Exception R java.lang.IllegalStateException: Error the FacesContext is already released!
    Ce qui explique bcp de choses mais je suis vraiment bloqué là, ça remet en cause mon utilisation du listener pour réaliser ce que je veux faire.
    HELP!

  4. #4
    Membre éprouvé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Par défaut
    Désolé de remonter le sujet. Personne n'a de solution ou de piste à me proposer?

Discussions similaires

  1. [JSlider] listener sur Jslider
    Par Garion dans le forum Composants
    Réponses: 4
    Dernier message: 31/05/2004, 13h33
  2. [JSP]comment créer un listener pour ma base de données
    Par Ekimasu dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 10/05/2004, 14h49
  3. Listener sur un JPanel
    Par ptitelfe dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 27/03/2004, 13h14
  4. TNS:listener could not resolve SERVICE_NAME given in connect
    Par Sinclair dans le forum Administration
    Réponses: 15
    Dernier message: 20/08/2003, 17h26
  5. DoubleClick Listener & ENTER
    Par Pro_Fete dans le forum Composants
    Réponses: 4
    Dernier message: 27/01/2003, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo