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

Wicket Java Discussion :

Rafraichir une liste


Sujet :

Wicket Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Par défaut Rafraichir une liste
    J'utilise une liste de type PropertyListView pour afficher une liste d'éléments complexes.
    Sur chaque ligne j'ai un petit bouton "supprimer" : ca marche bien, la ligne concernée est bien supprimée dès qu'on clique sur le bouton.
    Sur chaque ligne j'ai également un lien qui permet d'ouvrir une fenêtre modale pour voir le détail de l'objet concerné : ca marche bien également. La ou ca se corse, c'est que dans ma fenêtre modale j'ai aussi la possibilité de modifier l'objet : quand je fais "appliquer" dans ma modale, le modèle est bien mis a jour mais pas ma liste, pour voir les modification je dois cliquer sur un bouton "refresh", je n'arrive pas a le faire automatiquement.
    J'ai également un bouton "ajouter" qui ouvre également une fenêtre modale afin de pouvoir ajouter un élément à la liste : là aussi je doit cliquer sur le bouton "refresh" pour voir mon nouvel élément dans la liste....
    Y a t'il une subtilité pour faire en sorte que la liste se rafraichisse bien toute seule a la fermeture de ma modale ?
    Je ne poste pas le code car c'est un peu long mais je le ferai si c'est utile....

  2. #2
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    chouette, une question wicket

    ceci dit, sans aucun code, cela est un peu dur. Voyons ce qu'on peut faire !
    - quel type de modèle a la ListView ?
    - que fait le bouton refresh ?
    - dans la méthode moveDownLink de ListView, on voit à la fin un appel à removeAll(), afin de forcer la ListView à rafraichir ses données au prochain affichage. Cela a t il été tenté ?

    De façon générale, personnellement, je chercherai à déterminer:
    - si la phase de rendu de la ListView se fait bien après la réalisation des modifications
    - si le modèle de la listView prend bien en compte les modifications apportées (je pense par exemple à un LoadableDetachableModel, qui par défaut ne va pas aller à nouveau rafraichir les données au cours du même RequestCycle)

    bon courage en tout cas!

    ++
    joseph

  3. #3
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Par défaut
    Bonjour,
    Merci de ta réponse !

    Ma ListView utilise le modèle par défaut, c'est a dire un CompoundPropertyModel je pense....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PropertyListView<ExternalSystem> ls = new PropertyListView<ExternalSystem>("externalSystems", p_file.getExternalSystems())
    //p_file.getExternalSystems() renvoie List<ExternalSystem>
    Le bouton refresh ne fait rien a part un submit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final SubmitLink refreshLink = new SubmitLink("refreshLink") {
        @Override
        public void onSubmit() {
            p_file.setSave(false); //ca permet de faire juste un submit du modele, sans le sauver en base
        }
    };
    Je ne comprend pas bien quoi faire du removeAll()....

    De façon générale, personnellement, je chercherai à déterminer:
    - si la phase de rendu de la ListView se fait bien après la réalisation des modifications
    - si le modèle de la listView prend bien en compte les modifications apportées (je pense par exemple à un LoadableDetachableModel, qui par défaut ne va pas aller à nouveau rafraichir les données au cours du même RequestCycle)
    Je ne vois pas trop comment vérifier ca non plus (je suis pas super pro en wicket en fait)....

  4. #4
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par felix79 Voir le message
    Merci de ta réponse !
    de rien !

    Citation Envoyé par felix79 Voir le message
    Ma ListView utilise le modèle par défaut, c'est a dire un CompoundPropertyModel je pense....
    Hum, le modèle par défaut.. La ListView est construite en lui fournissant une liste ou un modèle autour d'une liste ? J'serai curieux de voir son constructeur perso, ainsi que d'où vient la liste fournie.

    A propos des modèles, je conseille vivement de passer le temps requis pour les appréhender correctement (si ce n'est pas déjà fait), notamment via http://jawher.wordpress.com/i-wrote/...les-de-wicket/

    Citation Envoyé par felix79 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PropertyListView<ExternalSystem> ls = new PropertyListView<ExternalSystem>("externalSystems", p_file.getExternalSystems())
    //p_file.getExternalSystems() renvoie List<ExternalSystem>
    Le bouton refresh ne fait rien a part un submit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    final SubmitLink refreshLink = new SubmitLink("refreshLink") {
        @Override
        public void onSubmit() {
            p_file.setSave(false); //ca permet de faire juste un submit du modele, sans le sauver en base
        }
    };
    cela provoque aussi, et surtout je pense, un réaffichage complet de la page, via un aller retour client/serveur. Et vu les résultats, lorsque la page se construit elle rafraichit bien ses données... Ca sent le problème de rafraichissement de modèles.

    Éventuellement, en cas de besoin très urgent, un tel ré affichage complet peut être généré via Wicket (via throw new RestartResponseException()); mais c'est pô bien, on devrait pouvoir identifier plus proprement la source du problème.

    Citation Envoyé par felix79 Voir le message
    Je ne comprend pas bien quoi faire du removeAll()....
    disons que si depuis la fenetre modale la list view est accessible, alors on pourrait envisager de faire : maListView.removeAll();

    Citation Envoyé par felix79 Voir le message
    Je ne vois pas trop comment vérifier ca non plus
    un truc simple et sympa avec wicket est que tout est côté serveur. Du coup il est possible de mettre des points d'arrêts, notamment dans la liste view.

    Dans le cas précis, au vu des hypothèses que je peux faire, le plus simple est sans doute de faire ça directement dans la classe servant de modèle, sur le getObject(), afin de voir ce qui est retourné (et d'en déduire la source du mal ).

    Citation Envoyé par felix79 Voir le message
    (je suis pas super pro en wicket en fait)
    no prob. Ca devrait se faire assez vite

  5. #5
    Membre confirmé
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 50
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 167
    Par défaut
    La ListView est construite en fournissant une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ls = new PropertyListView<ExternalSystem>("externalSystems", p_file.getExternalSystems())
    //p_file.getExternalSystems() renvoie List<ExternalSystem>
    La listView étant dans un formulaire, c'est le modèle de ce formulaire qui est utilisé si je comprend bien, voici la création de mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public UpdateComponentForm(String p_name, final ComponentFile p_file, final Component p_parent) {
    		super(p_name, new CompoundPropertyModel<ComponentFile>(p_file));
    En toute logique c'est donc un CompoundPropertyModel qui est utilisé.
    La liste utilisée par le list view provient de l'objet fourni au CompoundPropertyModel.

    Ma ListView n'est pas accessible depuis ma modale...
    Je pense que le modèle est bien mis a jour mais que le render de ma listView n'est pas appelé

  6. #6
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par felix79 Voir le message
    La ListView est construite en fournissant une liste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ls = new PropertyListView<ExternalSystem>("externalSystems", p_file.getExternalSystems())
    //p_file.getExternalSystems() renvoie List<ExternalSystem>
    La listView étant dans un formulaire, c'est le modèle de ce formulaire qui est utilisé si je comprend bien, voici la création de mon formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public UpdateComponentForm(String p_name, final ComponentFile p_file, final Component p_parent) {
    		super(p_name, new CompoundPropertyModel<ComponentFile>(p_file));
    En toute logique c'est donc un CompoundPropertyModel qui est utilisé.
    La liste utilisée par le list view provient de l'objet fourni au CompoundPropertyModel.

    Ma ListView n'est pas accessible depuis ma modale...
    Je pense que le modèle est bien mis a jour mais que le render de ma listView n'est pas appelé
    Bel enchainement de réflexion, qui achoppe je pense sur un détail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ls = new PropertyListView<ExternalSystem>("externalSystems", p_file.getExternalSystems())
    //p_file.getExternalSystems() renvoie List<ExternalSystem>
    Est ce que getExternalSystems renvoit un modèle ou directement la liste ?

    Dans la seconde hypothèse, tout lien avec un éventuel modèle représenté par p_file est perdu et la liste demeure telle qu'était à la création du composant.

    La javadoc de cette méthode dit justement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    /**
    * Construct with a "small," unmodeled List. The object can not be detached and will reside in
    * the session, but is convenient for lists of a limited size.
    *
    Pour lever le doute, perso je mettrai un point d'arrêt dans cette méthode de ListView:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    protected void renderItem(final ListItem<?> item)
    	{
    		item.render(getMarkupStream());
    	}
    Du coup on saurait si ce réaffichage se fait (ou pas) suite à la fermeture de la fenêtre modale et on pourrait également vérifier le contenu du modèle à ce moment donné.

    NB: si besoin je pourrai faire une petite appli de démo de la fonctionnalité demandée ici: je ne suis pas expert de ModalWindows, cela me fera une bonne révision

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

Discussions similaires

  1. [Syntaxe]rafraichir une liste avec internet explorer
    Par achos dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 27/02/2007, 17h26
  2. Rafraichir une liste deroulante dans un formulaire
    Par hellosct1 dans le forum IHM
    Réponses: 2
    Dernier message: 09/01/2007, 20h36
  3. rafraichir une liste déroulante
    Par zola dans le forum Général JavaScript
    Réponses: 26
    Dernier message: 27/04/2006, 16h34
  4. rafraichir une liste avec un <SELECT>
    Par karibouxe dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 20/02/2006, 09h05
  5. Rafraichir une liste déroualnte alimenter en php
    Par jenny50 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 25/01/2006, 13h23

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