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 :

Page qui se rafraichit pas


Sujet :

JSF Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut Page qui se rafraichit pas
    Bonjour,

    J'ai une méthode process() dans une page JSF qui appelle une connexion Oracle, et qui retourne un String pour afficher Connected quand on se connecte à Oracle.

    Le problème est que quand je clique sur le bouton "Connect", qui appelle la fonction Process() qui me connecte à une base de données, je n'arrive pas à afficher le "Welcome Connected" dans le Panel Information.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     <p:commandButton value="Connect"   
                         action="#{ManagedBeanO.process()}" />  
     
     
        <p:panel id="display" header="Information" style="margin-top:10px;">  
            <h:panelGrid columns="2">  
                <h:outputText value="connection " />
     
                    <h:outputLabel value="Welcome #{ManagedBeanO.process()} " />           
     
            <p:commandButton value="Next" /> 
     
            </h:panelGrid>  
        </p:panel>
    ManagedBeanO.java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private String Orac= "Connected";
    public String process() throws Exception
          {
                  if(connectedUser == null) {
                    connectedUser = getConnection(host,port,baseName,user,mdp );
                }
                 return Orac;
          }
    Quelqu'un saurait-il m'expliquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Bonjour,

    plusieurs choses me paraissent étrange dans ton code :
    • "return Orac;" dans ton action => il me semble qu'une action ne retourne rien ou retourne une règle de navigation (ou null pour recharger la page courante). Est-ce que "Connected" correspond bien à une règle définie dans ton faces-config.xml?
    • "value="Welcome #{ManagedBeanO.process()}" => je ne pense pas qu'un outputText puisse prendre en valeur une méthode. Là, tel que c'est écrit, il va aller chercher un getter de la forme UnObjet getProcess(){... return unObjet};


    Je connais mal Primefaces, mais je pense que la méthode qui va bien ici est de gérer le retour de ta fonction avec l'événement "oncomplete" sur ton p:commandButton ou/et avec l'attribut "update" (qui me semble t'il équivaut au "reRender" des boutons <a4j:commandLink>).

    Il y a de nombreuses façons de faire (et je ne prétends pas connaître la meilleure). Par ex :
    • Mettre à jour une propriété dans ton action et gérer avec l'"update" le raffichage de ton panel en fonction de cette propriété (ça ne changerait pas beaucoup ton code)
    • Jouer avec des messages envoyés au contexte et sur le "oncomplete" afficher un message en fonction de la sévérité du message
    • Rediriger vers une page spécifique au retour de ta fonction (créer une règle de navigation à retourner en fin d'action)


    Voilà... j'espère que ça te sera utile. Si celà ne te paraît pas clair, j'essaierai de détailler.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    "return Orac;" dans ton action => il me semble qu'une action ne retourne rien ou retourne une règle de navigation (ou null pour recharger la page courante). Est-ce que "Connected" correspond bien à une règle définie dans ton faces-config.xml?

    NON 'Connected' ne correspond pas à une règle dans faces-config.xml

    "value="Welcome #{ManagedBeanO.process()}" => je ne pense pas qu'un outputText puisse prendre en valeur une méthode. Là, tel que c'est écrit, il va aller chercher un getter de la forme UnObjet getProcess(){... return unObjet};

    y a pas de gestProcess(), il fait juste un rappel à la méthode process(), qui a été déjà appelé par <p:commandButton value="Connect"
    action="#{ManagedBeanO.process()}" />



    Mettre à jour une propriété dans ton action et gérer avec l'"update" le raffichage de ton panel en fonction de cette propriété (ça ne changerait pas beaucoup ton code)

    Peux-tu modifier mon code ou me montrer comment faire pour faire ce que tu venais de me dire STP

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par maserati Voir le message
    NON 'Connected' ne correspond pas à une règle dans faces-config.xml
    Donc la règle à suivre est déjà de changer le retour : tu ne pourras rien faire de la chaîne retournée.

    Citation Envoyé par maserati Voir le message
    y a pas de gestProcess(), il fait juste un rappel à la méthode process(), qui a été déjà appelé par <p:commandButton value="Connect"
    action="#{ManagedBeanO.process()}" />
    Je ne crois vraiment pas qu'on puisse appeler une méthode dans un champ de type "value". Seul une propriété pour lequel il existe un getter peut être spécifiée dedans. Et puis ça reviendrait à appeler deux fois ta connection.

    Ca pourrait donner qqchose comme ça (je suppose que pour le besoin de maintenir la connexion ton bean est en session : je pars donc de ce postulat):

    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
    private String Orac= "Connected";
    private String welcomeVar; // + getter/setter publics
    private boolean connected; // + getter/setter publics
     
    public void process() throws Exception
    	  {
                  if(connectedUser == null) {
    		        connectedUser = getConnection(host,port,baseName,user,mdp );
    		    }
                  if(pourUneRaisonOuUneAutreCaNaPasMarche){
                              connected = false;
                   }else{
                     connected = true;
                     welcomeVar = new String(Orac);
                    }
     
    	  }

    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
     <p:commandButton value="Connect"   
                         action="#{ManagedBeanO.process()}" update="toUpdate"/>
     
      <p:outputPanel id="toUpdate">
        <p:panel id="display" header="Information" style="margin-top:10px;" >  
            <h:panelGrid columns="2">  
                <h:outputText value="connection " />
     
                    <h:outputLabel value="Welcome #{ManagedBeanO.welcomeVar} rendered="#{ManagedBeanO.connected} " />           
     
            <p:commandButton value="Next" /> 
     
            </h:panelGrid>  
        </p:panel>
      </p:outputPanel>
    C'est une des solutions.
    Je ne l'ai pas testée, c'est juste de l'algorithmique mise en forme. Il faudra peut-être reformuler un peu pour que ça marche vraiment
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    D'abord merci pour ta réponse, j'ai fait exactement ce que tu m'as écris ci-dessus, malheureusement ça marche pas, dans le panel " Information " j'arrive pas à afficher la variable Welcomevar incompréhensible tout ça

  6. #6
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Ton bean est bien en session?

    Si ce n'est pas le cas, le problème est là... (est- ce que tu ne dois pas le mettre en session pour maintenir la connection? Si ce n'est pas le cas, il faudra faire autrement)

    Sinon, essaie déjà un truc simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     <p:commandButton value="Connect"   
                         action="#{ManagedBeanO.process()}" update="toUpdate"/>
     
      <p:outputPanel id="toUpdate">
                   <h:outputText value="#{ManagedBeanO.welcomeVar}" rendered="#{ManagedBeanO.connected} " />           
      </p:outputPanel>
    Si ça ça ne marche pas, tente de faire avec des composants de base de JSF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <a4j:commandLink value="Connect"   immediate ="true" 
                         action="#{ManagedBeanO.process()}" reRender="toUpdate"/>
     
      <h:outputPanel id="toUpdate">
                   <h:outputText value="#{ManagedBeanO.welcomeVar}" rendered="#{ManagedBeanO.connected} " />           
      </h:outputPanel>
    Si rien ne marche.... on verra
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    Désolé de te décevoir, mais rien ne s'affiche, j'ai fait exactement ce que tu m'as demandé de faire.

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Ton bean est en session?


    Tu as essayé le code tel quel ou tu as corrigé les qqs erreurs de syntaxe?


    Je me recite :
    Je ne l'ai pas testée, c'est juste de l'algorithmique mise en forme. Il faudra peut-être reformuler un peu pour que ça marche vraiment
    Je viens de tester le code et ça marche avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          <a4j:commandLink value="Connect"  immediate="true"
                         action="#{ManagedBeanO.process}" reRender="toUpdate"/>
     	<a4j:outputPanel id="toUpdate" >
                   <h:outputText value="TOTOTOTOTO #{ManagedBeanO.welcomeVar}" rendered="#{ManagedBeanO.connected}" />  
          </a4j:outputPanel>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void process() throws Exception
        	  {     
                         connected = !connected;
                         welcomeVar = new String(Orac);
        	  }
    C'est une version très simplifiée, pour tester (ManagedBeanO est en session)
    Si ça ne marche pas chez toi, c'est que la cause est ailleurs.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    ça a pas marché au premier, deuxième coup

    j'ai retesté, ça a marché, puis ça marche pas .... c'est bizzare ....

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    par exemple:

    quand j'ai modifié process () en mettant connected = true;

    j'ai sauvegarder, j'ai executer et ça a marché

    puis j'ai fermé, j'ai réexecuté, ça marche plus

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    Quand j'ai rajouté cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	  public void process() throws Exception
    	  {
                      if(welcomeVar == null) 
                        { 
                         connected = true;
                         welcomeVar = new String(Orac);
                        }
     
    	  }
    ça a marché au premier coup, quand j'ai réexecuté ça a pas marché ( malgré le fait que j'ai fait un clean & build )

    Quand j'ai remodifier la méthode process, en enlevant la condition if

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	  public void process() throws Exception
    	  {
                                           connected = true;
                         welcomeVar = new String(Orac);
     
    	  }
    ça a marché au premier coup, quand j'ai réexecuté ça a pas marché


    PS: Oui mon bean est SessionScoped

  12. #12
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Quand tu dis que ça n'a pas marché, tu veux dire que ça s'est affiché une première fois, puis que ça n'a plus bougé?

    Si tu rafraichis ta page (ctrl + shift + R), ça s'affiche? (ce qui voudrait dire que le reRender ne fonctionne pas).

    On est bien d'accord que mon code affiche et masque successivement le texte ?
    (je suis désolé si ma question paraît bête ; mais autant lever le doute!)

    Il est possible aussi que l'id de ton outputPanel soit "préfixé" lors du rendu (du type "monForm:toUpdate"). Jette éventuellement un oeil avec Firebug (ou équivalent) sur ta page pour contrôler que tu n'as pas une propriété "prependId = "true" qq part. Auquel cas, sois tu changes cet attribut, sois tu fournis à "reRender" l'id préfixé.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    318
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 318
    Points : 81
    Points
    81
    Par défaut
    Quand tu dis que ça n'a pas marché, tu veux dire que ça s'est affiché une première fois, puis que ça n'a plus bougé?

    - ça s'est affiché, puis j'ai fermé l'appli, puis j'ai réexecuté et ça ne s'affiche plus ( en cliquant sur le boutton )

    Si tu rafraichis ta page (ctrl + shift + R), ça s'affiche? (ce qui voudrait dire que le reRender ne fonctionne pas).

    - On est bien d'accord que mon code affiche et masque successivement le texte ?


    (je suis désolé si ma question paraît bête ; mais autant lever le doute!)

    - Tu as raison, je pensais qu'il affiche juste le texte, et qu'il ne le masque pas .... pourquoi il doit le masquer ? alors que quand on lcique sur le boutton il change normalement la variable connect to true ...

    Il est possible aussi que l'id de ton outputPanel soit "préfixé" lors du rendu (du type "monForm:toUpdate"). Jette éventuellement un oeil avec Firebug (ou équivalent) sur ta page pour contrôler que tu n'as pas une propriété "prependId = "true" qq part. Auquel cas, sois tu changes cet attribut, sois tu fournis à "reRender" l'id préfixé.
    - j'ai pas compris le "monForm : toUpdate " ça correpond à quoi dans mon code ?

    Merci beaucoup de votre aide

  14. #14
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Octobre 2008
    Messages : 179
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par maserati Voir le message
    - Tu as raison, je pensais qu'il affiche juste le texte, et qu'il ne le masque pas .... pourquoi il doit le masquer ? alors que quand on lcique sur le boutton il change normalement la variable connect to true ...
    c'était juste pour vérifier le bon fonctionnement des composants.
    Tu peux repartir de ces éléments et revenir à ta fonction de connection
    Ca donnerait (grosso modo!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     public void process() throws Exception
    	  {
    connected = false;
    welcomeVar = "";
                  if(connectedUser == null) {
    		        connectedUser = getConnection(host,port,baseName,user,mdp );
    if(connectedUser != null){
    connected = true;
    welcomeVar = new String(Orac);
    		    }else{
    //par ex throw new OracleConnectionException("problème...");
    }
    	  }
    A reformuler bien sûr : mon exemple est tout sauf du code rigoureux!


    Citation Envoyé par maserati Voir le message
    - j'ai pas compris le "monForm : toUpdate " ça correpond à quoi dans mon code ?
    Mettons que tu fasses qqchose comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <h:form id="monForm" prependId="true">
        <a4j:outputPanel id="toUpdate">
            <h:outputText  value="toto"/>
        </a4j:outputPanel>
    </h:form>
    Dans la page cliente générée, si tu inspectes ton élément toto, tu verras qu'il y a autour un <span id="monForm:toto"> . L'option prependId reformule l'id en lui préfixant celui du conteneur JSF supérieur (et ainsi de suite). Je maîtrise mal cette option cependant, et ne t'en parlerais pas plus de peur de dire des bêtises. Mais pour résumer, cette option change les ids, et donc tu dois en prendre compte lorsque tu cibles des composants dans des "reRender" ou des "update", par ex.
    Roger l'Âne: le lapin devenu grand....
    _______________________________________________________________
    Développeur bio-informatique; spécialiste en rien, généraliste en tout.

    Capitan ! Capitan ! On a aperçu le Loup ! Il a pris d'assaut une chaise à porteurs, à l'aide d'un cul-de-jatte et d'un lapin !
    (Pavillon noir !, Alain Ayroles/Jean-Luc Masboux, éd. Delcourt, coll. Terres de Légendes, 1997, p. 18)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection de page qui ne fonctionne pas.
    Par JeanJean75 dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2010, 14h54
  2. Jdialog qui ne rafraichit pas
    Par Hesiode dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 25/09/2009, 13h06
  3. Réponses: 0
    Dernier message: 28/05/2009, 01h14
  4. Réponses: 1
    Dernier message: 29/05/2007, 12h35
  5. Réponses: 1
    Dernier message: 24/09/2006, 14h36

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