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 :

dataList & a4j


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut dataList & a4j
    salut,

    y a t-il un moyen de rafraichir un seul élément d'une dataList ?

    Mon code ressemble à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <t:dataList id="dataListId" value="#{monBean.listeElement}" var="unElement" rowIndexVar="current">
    <h:selectOneRadio value="#{monBean.value}" >
          <f:selectItem itemValue="value1" />
          <f:selectItem itemValue="value2" />
          <a4j:support event="onchange" reRender="elementsARafraichir" />
       <h:selectOneRadio>
       <h:panelGroup id="elementsARafraichir">
          ...
          ...
       </h:panelGroup>
    </t:dataList>
    j'ai essayé également de remplacer la dataList par un forEach mais, ça n'a pas résolu mon problème car l'attribut reRender n'accepte pas d'EL.


    Merci d'avance

  2. #2
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut exploiter la classe AjaxContext et FacesContex
    Créer une méthode dans le controller et dans cette methode essayez d'exploiter la classe AjaxContext et FacesContex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    {
    ....
    FacesContext ctx = FacesContext.getCurrentInstance();
    UIComponent elem_a_ref = ((UIComponent) ctx.getViewRoot()).geElementById("elementsARafraichir");
     
     
    AjaxContext ac=  AjaxContext.getCurrentInstance();
    ac.addComponentToAjaxRender(elem_a_ref );
    ...
    }

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Merci pour ta réponse.

    Le souci est justement l'id que je n'arrive pas à rendre dynamique.

    je voulais faire ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ...
    <a4j:support event="onchange" reRender="elementsARafraichir_{index}" />
    ...
    <h:panelGroup id="elementARafraichir_<c:out value='${index}/>'" />
    ...
    mais ça ne marche pas car les attributs id et reRender n'acceptent pas d'EL !
    Donc ta solution ne résout pas totalement le problème dans la mesure ou je n'arrive pas à distinguer les différents blocs (à rafraichir) générés

  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
    Par défaut
    Pourquoi tu ne fais pas le reRender sur toute la datalist.

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Je trouve que c'est dommage de reRender toute la dataListe alors que seules la valeurs d'un élément (ensemble d'éléments générés dans la même itération) doit être mis à jour.

  6. #6
    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
    Par défaut
    ok,
    et si tu englobe l'élément dans un a4j:outputPanel et tu fais le reRender sur ce dernier?
    tu as vérifier si la valeur change bien coté serveur..?

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    J'obtiens le même comportement qu'avec le reRender

    oui, les valeurs sont bien mises à jour coté serveur.

    Je ne sais pas si j'étais clair! mais mon problème consiste à donner des ids différents à chacun des élément générés par le dataList (ou forEach) pour que je puisse appliquer le reRender uniquement sur cet élément et non pas sur toute la liste

  8. #8
    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
    Par défaut
    Citation Envoyé par soucine Voir le message
    J'obtiens le même comportement qu'avec le reRender

    oui, les valeurs sont bien mises à jour coté serveur.

    Je ne sais pas si j'étais clair! mais mon problème consiste à donner des ids différents à chacun des élément générés par le dataList (ou forEach) pour que je puisse appliquer le reRender uniquement sur cet élément et non pas sur toute la liste
    tu ne peux pas récupérer l'id, je pense que c'est plus simple de faire le reRender sur la dataList ou une partie de la dataList.

  9. #9
    Membre très actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Par défaut à la place de l'id utiliser getParent()
    Citation Envoyé par Sniper37 Voir le message
    tu ne peux pas récupérer l'id
    Je pose une idée pour cette problème, c'est d'utiliser getParent() de l'élément à rafraichir (le parent c'est outputPanel conteneur), donc je combine les solutions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    {
    ....
    FacesContext ctx = FacesContext.getCurrentInstance();
    UIComponent elem_a_ref = ((UIComponent) ctx.getViewRoot()).geElementById("elementsARafraichir");
     
    UIComponent panel_parent=elem_a_ref.getParent();
     
    AjaxContext ac=  AjaxContext.getCurrentInstance();
    ac.addComponentToAjaxRender(panel_parent);
    ...
    }
    essayez avec ce code!

  10. #10
    Membre éclairé Avatar de VirageGroup
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 81
    Par défaut
    Bonjour,

    Tu peux essayer en remplaçant <t:datalist> par une <rich:dataList>

    Ce composant possède un attribut "ajaxKeys" qui peut prendre une EL.
    cette EL peut pointer vers un Set<Integer> qui contient les index des lignes a rerendre. Il faut indiquer la datalist dans le "render" mais seuls les lignes fournis à ajaxkeys seront rerendues.

    Par ailleurs "rerender" accepte les EL.

    VG.

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Par défaut
    Merci à tous. ça marche très bien avec le rich:dataTable et sans utiliser l'attribut ajaxKeys.

    Juste l'élément modifié est rafraichit

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

Discussions similaires

  1. [C#] WebControl DataList
    Par SoaB dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/03/2005, 14h35

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