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 :

Problème au cours d'une requête Ajax


Sujet :

JSF Java

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 146
    Points : 101
    Points
    101
    Par défaut Problème au cours d'une requête Ajax
    J'ai une page qui contient un champ inputText :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:inputText id="text_name" >
         <a4j:support event="onchange" reRender="comboBox_famille"  action="#{Edition.testAjax}" />
          </h:inputText>
    La méthode testeAjax et getItems:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       public void testAjax(){
            System.out.println("/!!! Test Ajax réussie  :");
        }
        public List getItems() {
            System.out.println( "/! Je suis dans la méthode getItems()");
    ......return items;
        }
    et un tableau extendedDataTable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <rich:extendedDataTable  height="345px" id="table"  selectionMode="single" value="#{Edition.items}" var="column" width="730px">
    Le problème c que à chaque requête d'Ajax il fait appel à la méthode getItems() dans le bean Edition alors qu'il ne devrais pas le faire!!!!
    J'ai ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <h:inputText id="text_name" >
     <a4j:support event="onchange" ajaxSingle="true"...
    mais même résultat
    Comment faire pour interdire l'appel du getter des items (qui sont chargé à partir de la base = ralentir l'exécution)
    et merci.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    l'inputText n'est pas dans un a4j:outputPanel avec ajaxRendered="true" ou a4j:region?

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 146
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    l'inputText n'est pas dans un a4j:outputPanel avec ajaxRendered="true" ou a4j:region?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <webuijsf:form id="form1"><h:panelGrid id="gridPanel...
     <webuijsf:panelLayout id="layoutPanel..
    <h:inputText id="text_name" >
         <a4j:support event="onchange" reRender="label1"  action="#{Edition.testAjax}" />
          </h:inputText>
    ... </webuijsf:panelLayout>
         </h:panelGrid>
    <h:panelGrid id="Panel2" ..
          <rich:extendedDataTable..
     </rich:extendedDataTable>                          
      </h:panelGrid>>
       </webuijsf:form>
    j'ai testé l'exécution de la méthode avec d'autre événements et composants , elle est exécuté mais je veut évité l'appel du getItems() qui ne me sert à rien et je ne sais pas pourquoi il l'exécute?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Points : 5 059
    Points
    5 059
    Par défaut
    Il est appelé au rendu de la vu,
    ça correspond à quoi ce que tu mets dans le reRender,

    Mais, il n'est pas conseillé de faire dans le getter un appel à la base, le getter est appelé plusieurs fois lors du cycle JSF,

    au pire fait le test, fait appel à la base que s'il n'est pas null.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2008
    Messages : 146
    Points : 101
    Points
    101
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    Mais, il n'est pas conseillé de faire dans le getter un appel à la base, le getter est appelé plusieurs fois lors du cycle JSF,

    au pire fait le test, fait appel à la base que s'il n'est pas null.
    oui je fais le test avant de faire le chargement de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        public List getItems() {
            System.out.println( "/! Je suis dans la méthode getItems()");
    if(items == null)
    items = ChargerItems();
    return items;
        }
    Citation Envoyé par Sniper37 Voir le message
    ça correspond à quoi ce que tu mets dans le reRender
    quelque soit la valeur que je lui donne dans le reRender j'obtiens le même résultat,
    Pour éviter le rechargement ,j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       public void testAjax(){
            System.out.println("/!!! Test Ajax réussie  :");
    this.items = new ArrayList();
        }
    et ça marche , mais je n'ai pas compris pourquoi il fait appel à cette liste exactement , y-a t il une autre solution pour éviter l'appel.

Discussions similaires

  1. [AJAX] Savoir si une requête Ajax est en cours
    Par FaridM dans le forum AJAX
    Réponses: 3
    Dernier message: 23/02/2012, 16h52
  2. [AJAX] Envoie d'une requête AJAX
    Par tidus_6_9_2 dans le forum AJAX
    Réponses: 16
    Dernier message: 14/04/2010, 15h23
  3. [SQL] Problème de résultat avec une requête
    Par raptorman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2006, 17h16
  4. Problème de débutant dans une requête
    Par decour dans le forum Access
    Réponses: 7
    Dernier message: 14/10/2005, 14h17
  5. problème de formulation d'une requête
    Par seiryujay dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/08/2004, 17h13

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