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

  1. #21
    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
    Rebonjour !

    J'ai enlevé le résolu pour permettre de compléter une réponse :

    ça dépend, tu peux calculer la liste avant l'affichage de la page dans une fonction appelé sur une action de l'utilisateur..sinon au pire, si il n'y a pas de d'action utilisateur, tu peux aussi faire l'appel dans le constructeur..
    Et si un bean controller est de scope session, comment fait t-on pour re-initialiser ses valeur lors d'un rechargement de la page ? Le constructeur n'est plus appelé. Un bean de scope request ne conviendrai pas car il faut bien stoker les valeurs 'en cours' quelque part.

    La solution serait-elle de faire mettre les bean controller en request et d'avoir 1 seul bean session qui contient les valeur en cours ? C'est lourd comme solution ça non ?

    [EDIT] J'ai modifié mon message car je mélangeai deux problèmes bien distinct. Je vais ouvrir un autre topic sur ce problème pour faciliter les recherche futur

  2. #22
    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
    Personne ?

    Je galère à cause de ces scopes... Si je met scope request sur mon controller, à chaque requête (même ajax ..), j'ai un appel au constructeur qui est fait. normal en soit (sauf pour l'ajax)
    Mais scope session ne me conviens également pas puisque lorsque l'utilisateur change de page puis reviens sur celle-ci il ne faut pas que ce soit les anciennes valeur qui soient chargée.

    J'ai zieuté du coté de a4j:keepAlive ça fonctionne, ça garde bien un bean même si il est de scope request. Par contre, à chaque requête ajax, le constructeur mon controller est quand même appelé

  3. #23
    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
    Pour réinitialiser le bean, il suffit de l'enlever de la session..
    regarde les solutions de la

  4. #24
    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
    J'ai déja regardé mais sans trouver la réponse appropriée au probleme.
    J'ai tout de même réussi a arriver au comportement attendu c'est a dire que:

    -> Mon bean Controller est en scope request : Lorsque l'utilisateur reviens sur la page, les valeur sont réinitialisés.

    ->Lors d'une requete ajax, le bean controller n'est pas recréé (pas d'appel au constructeur)

    -> Les valeur 'en cours' sont quand même conservées

    Pour cela, j'ai fait un truc qui n'est vraiment pas chouette mais bon...
    J'ai implémenté Serializable sur mon controller et j'ai mis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a4j:keepAlive ajaxOnly="true" beanName="controller"></a4j:keepAlive>
    qui conserve mon bean lors de toutes les requêtes ajax. Lors d'une requete traditionnelle, ce bean est détruit à chaque request

    Le GROS inconvénient de cette solution est que tout les attributs de mon controller doivent implémenter également Serializable... et ça c'est pas chouette. Je sais pas si il y a meilleure solution

  5. #25
    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
    J'ai posté trop vite... ça ne fonctionne pas

    j'ai un panel qui apparait en fonction de l'appuis sur un bouton
    Ce panel contient lui même un autre bouton. Cet autre bouton sert enregistrer des valeur saisies.
    Sauf que... l'action qui est lié a la méthode de mon backing bean n'est plus exéctué ...
    Je vais devenir fou !

  6. #26
    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
    le bean est sauvegardé que pendant les requetes ajax, à la première requete non ajax le bean est réinitialiser..
    ce n'est pas le comportement que tu cherchais?

  7. #27
    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
    Si ! c'est exactement ce que je cherche.

    Sauf que... les méthodes liées au bouton contenues dans le panel qui apparait ne sont plus exécutées lors d'un clic..

    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
     
    Ce bouton fait appraitre l panel ajoutPanel
    <a4j:commandButton value="Ajouter"action="#{controller.ajouter}"
    				reRender="ajoutPanel">
    </a4j:commandButton>
     
    <h:panelGroup id="ajoutPanel">
         <h:panelGroup  rendered="#{controller.visible}" >
         ....
         ....
         champs ici
         ....
         ...
         <a4j:commandButton id="ajouterButton" value="Ajouter" rendered="#{controller.ajout}" action="#{controller.ajouter}" reRender="ajoutPanel"></a4j:commandButton>
         <h:panelGroup>
    <h:panelGroup
    La méthode ajouter n'est plus executé

  8. #28
    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
    tu n'a pas d'erreur de validation/conversion..?

    Sinon tu peux regarder ce qui ce passe lors de la requete ajax avec:


  9. #29
    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
    Non pas d'erreur de conversion/validation. J'ai vérifié.
    Ce qui est étrange c'est que ça fonctionnait avant l'ajout de
    <a4j:keepAlive ajaxOnly="true" beanName="controller"></a4j:keepAlive>
    et le passage du bean en scope request

    Au sujet du log j'ai la trace d'une erreur:
    error[11:23:22,949]: New node for ID form:ajoutPanel is not present in response

    Je ne sais guère si je doit l'interpréter comme la source de mon soucis

  10. #30
    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
    et si tu enlève le ajaxOnly, c'était quoi le problème?

  11. #31
    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
    Étonnamment, dans mon cas, le AjaxOnly="true" a visiblement le même comportement que AjaxOnly="False".
    Je l'avais mis à true car selon la doc c'est ce qui correspond à ma problématique.
    Donc même à false, même souci, mes méthodes associées aux boutons qui ne sont pas rendu la première fois ne fonctionnent pas

  12. #32
    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
    Nooooon ! Je viens de trouver la cause !

    La cause est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        <context-param> 
            <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
            <param-value>client</param-value> 
        </context-param>

    Je l'ai passé en "server" et ça fonctionne

  13. #33
    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
    Bon par contre, je chercher toujours une solution plus élégante pour la Sérialisation du controller. En effet, je suis dans l'obligation de mettre TOUT les attributs implements Serializable. c'est vraiment pas la panacée. Sérialiser des objet de la couche service c'est vraiment pas utile

  14. #34
    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
    Je m'auto répond hein ça pourra servir a d'autre
    Donc, en plaçant les éléments que l'on ne veux pas sérialiser a "transient", ça a l'air de fonctionner sans trop poser de soucis

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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