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 :

Composant composite - Problème de rendu


Sujet :

JSF Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Composant composite - Problème de rendu
    Bonjour j'ai un composant composite qui marche très bien sauf à un niveau :

    j'utilise ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <ui:repeat value="#{cc.list}" var="entrie" varStatus="loop">
    // code
    </ui:repeat>
    cc.list fait référence à une méthode Java qui me retourne une liste. Jusqu'ici pas de problème.
    Ce qui est bizarre c'est que j'ai mis un point d’arrêt dans cette méthode,
    sur ma home page le composant n'est pas utilisé mais je passe quand même dans ma méthode getList()

    On dirait qu'il cherche à évaluer toutes les méthodes utilisées dans mon xhtml même si le composant n'est pas rendu.

    Même si mon composant est à l'intérieur d'un h:panelGroup avec un rendered à false, je passe quand même par ma méthode getList().

    Le seul moyen que j'ai trouvé pour qu'il n'évalue pas cc.list c'est d'entourer mon composant avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <c:if test="#{monTest}>"
    Mais ça m'oblige à le faire à chaque fois que j'utilise mon composant c'est à dire beaucoup de fois...

    Une idée ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu peux nous montrer comment ton composant est intégré? Parce que si tu as mis rendered="#{not empty cc.list}" forcément, cc.list sera évalué.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Par exemple l'appel du composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:panelGroup rendered="#{MaPopup.visible}">
      <u3:monComposant />
      // Code
    </h:panelGroup>
    MaPopup.visible vaut false donc à partir de là je ne comprends pas pourquoi il m'évalue ce qu'il y a dans u3:monComposant

    et mon composant est construit normallement avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <composite:interface componentType="monComposantComposite">
      <composite:attribute name="unAttribut" />
    </composite:interface>
     
    <composite:implementation>
      <ui:repeat value="#{cc.list}" var="entrie" varStatus="loop">
        // Code
      </ui:repeat>
    </composite:implementation>

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tu es sur que #{MaPopup.visible} vaut bien false, dans toutes les phases du cycle JSF? Ce n'est pas parce qu'elle vaut false au moment du render response qu'elle l'est au moment du restore view. Si tu remplace par #{false} ça donne quoi?

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Logiquement oui c'est mis à true une fois que ma popup s'ouvre.

    Avec #{false} j'ai le même comportement

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Alors, selon moi, c'est que tu référence ta liste ailleurs dans tes pages / dans tes managed beans / ....

    A partir du breakpoint, remonte jusque l'appel à resolve() sur l'expression, tu devrais retrouver là quelque part dans les champs privé la string de l'expression et voir d'où ça viens.

    Ou alors tu lance une RuntimeException et JSF sera bien gentils de te préciser la ligne / colonne / fichier où était cette expression

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Pas de références ailleurs.

    Par contre ça vient du ui:repeat qui évalue à chaque fois son attribut value...

    Si je l'enlève je ne passe plus dans la méthode même si j'utilise mon cc.list à d'autre endroit dans mon composant
    (sans ui:repeat).

    Je vérifie avec le point d'arrêt.

    Bizarre.

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    il me semble, mais je dit peut être des bêtises, que ui:repeat et un tag structurel, qui permet de dupliquer des entrées dans l'arbre JSF. Donc contrairement à h:datatable, il n'est pas évalué à chaque étape du cycle, mais une seul fois lors de la création de l'arbre jsf, et donc n'est pas influencé par les rendered. Un peut comme le c:forEach.

    Désolé, c'est trop loin en arrière pour moi le JSF, je ne pourrais pas mettre ma main à couper

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2014
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Ok merci en tout cas.

    J'ai résolu mon problème avec un itérateur "maison"

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/08/2013, 18h13
  2. [RichFaces] Problème de rendu de composants
    Par jaymz dans le forum JSF
    Réponses: 22
    Dernier message: 09/03/2011, 15h02
  3. [wxPython] problème de rendu
    Par tool69 dans le forum wxPython
    Réponses: 5
    Dernier message: 25/09/2005, 19h43
  4. [Creation composant visuel] Problème avec le focus
    Par Ingham dans le forum Composants VCL
    Réponses: 9
    Dernier message: 23/09/2004, 16h59
  5. Problème de rendu 2D
    Par Freakazoid dans le forum DirectX
    Réponses: 6
    Dernier message: 04/08/2004, 21h47

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