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 :

Richfaces: Optimisation des reRender


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Par défaut Richfaces: Optimisation des reRender
    Bonjour à tous !

    J'ai actuellement 2 soucis non bloquant mais assez génant, je voudrai savoir si d'autres personnes on déjà eu ces problèmes. Visiblement, je n'ai pas trouvé de problème similaire dans le forum. Je précise que mes solutions fonctionnent mais sont loin d'être élégantes


    1er soucis :
    Tout d'abord, j'ai un bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a4j:commandButton value="Ajouter" action="#{monController.ajouter}" reRender="ajoutPanel">
    </a4j:commandButton>   ----> Ce bouton modifie le boolean "monController.visible"
    Pourquoi suis-je obligé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a4j:outputPanel id="ajoutPanel">
        <a4j:outputPanel rendered="#{monController.visible}">
        ...
    </a4j:outputPanel>
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a4j:outputPanel id="ajoutPanel" rendered="#{monController.visible}">
        ...
    </a4j:outputPanel>
    pour que le click sur mon bouton fasse apparaitre le panel ?


    2eme soucis dans la continuité du 1er :

    j'ai une rich:datatable dans un panel, un bouton et des champs dans un autre panel.
    Pourquoi est ce que lorsque je fait un rerender sur le panel contenant mes champs et mon bouton, ma datatable est également rechargé ?
    Au final, ça fonctionne bien entendu... Mais le nombre de requete sur la base est grandement augmenté.
    J'aimerai que SEUL mon panel avec mes champs et mon bouton soit rafraichis.
    J'espère être assez clair dans mes explications. Si tel n'est pas le cas, j'ai trouvé quelqu'un ayant un problème similaire, il explique peut être mieux que moi:
    http://www.seamframework.org/41028.lace

    Merci d'avance à ceux qui prendrons le temps de m'aider.

    David

  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
    Par défaut
    Citation Envoyé par davidovitch Voir le message
    Bonjour à tous !


    Pourquoi suis-je obligé de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a4j:outputPanel id="ajoutPanel">
        <a4j:outputPanel rendered="#{monController.visible}">
        ...
    </a4j:outputPanel>
    et non

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a4j:outputPanel id="ajoutPanel" rendered="#{monController.visible}">
        ...
    </a4j:outputPanel>
    pour que le click sur mon bouton fasse apparaitre le panel ?
    C'est normal, tu ne peux pas faire un reRender sur un composant qui n'est pas présent dans le DOM, c'est pour celà que il faut faire le reRender sur le composant parent.


    Citation Envoyé par davidovitch Voir le message

    2eme soucis dans la continuité du 1er :
    peux tu nous montrer le code?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Par défaut
    Merci beaucoup pour ton aide !

    C'est pas sur le composant "enfant" que tu voulais dire ?

    Voila le code (simplifié du 2nd souci). J'ai fait quelques modif depuis mon 1er post

    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
     
    <rich:dataTable id="maListe" binding="#{monController.dataTable}" value="#{monController.touteMaliste}" var="var" >
    		<rich:column>
    			..
    		</rich:column>
    		<rich:column>
    			..
    		</rich:column>
    </rich:dataTable>
     
    <a4j:form id="form">
     
            ---> rend monController.visible=true
            <a4j:commandButton value="Ajouter" action="#	{monController.ajouter}" reRender="ajout">
            </a4j:commandButton>
     
     
            <a4j:outputPanel id="ajout">	
    		<a4j:outputPanel rendered="#{monController.visible}">
    		        ...
                            ...
                            ...
    	                <a4j:commandButton value="Annuler" immediate="true" action="#{moncontroller.cachePanel}" reRender="ajout"></a4j:commandButton>
                            ---->Remet monController.visible=false
    	        </a4j:outputPanel>
    	</a4j:outputPanel>
    </a4j:form>
    Explication : Lors du clic sur Ajouter/Annuler, le panel "ajout" apparait/disparait (normal!) mais des requête sur la base qui sont également déclenchée pour actualiser la datatable alors que je n'ai pas demandé de rerender de cette dernière

  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
    Non tu le reREnder c'est sur le composant qui est toujours dans le DOM, donc le composant parent.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <a4j:outputPanel id="panel">
     
    <xx:yyyy rendered="condition" />
     
    </a4j:outputPanel>
     
    <a4j:commandButton reRender="panel"/>
    pour le second problème, ajoute la table aussi dans le même formulaire..

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 40
    Par défaut
    Pigé pour le 1er souci !

    Le 2eme, même en mettant tout dans le même form, même souci. j'avais déja tenté

  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
    Citation Envoyé par davidovitch Voir le message
    Pigé pour le 1er souci !

    Le 2eme, même en mettant tout dans le même form, même souci. j'avais déja tenté
    pas normal ça ..
    Est ce que par hasard la table est incluse dans un composants a4j tel que a4j:outputPanel avec ajaxRendered égal à true ?

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

Discussions similaires

  1. [Disques durs] Optimisation des partitions
    Par DarkOcean dans le forum Composants
    Réponses: 18
    Dernier message: 10/02/2005, 13h54
  2. Optimisation des tables
    Par le-roy_a dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 24/01/2005, 10h04
  3. optimisation des requêtes
    Par yech dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 21/09/2004, 19h03
  4. [Compilateur] Optimisation des conditions
    Par Pedro dans le forum Langage
    Réponses: 2
    Dernier message: 16/06/2004, 13h49
  5. Optimisation des requetes
    Par bifidus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/10/2003, 11h29

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