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

Ext JS / Sencha Discussion :

Pagination dans une grille AJAX


Sujet :

Ext JS / Sencha

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut Pagination dans une grille AJAX
    Bonjour,

    Eh oui, encore un problème...Un soucis de pagination dans une grille. Je charge mes données depuis le serveur sans soucis, mais à l'affichage, tous les résultats sont affichés dans la première page, bien que la toolbar du bas m'indique correctement le nombre de pages que je devrais avoir (et je peux naviguer dedans, mais tous les résultats s'affichent à chaque fois).Ci-dessous le code correspondant :

    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
     
    var store = new Ext.data.Store({
         proxy : new Ext.data.HttpProxy({
              url: 'monURL/monAction.do?method=loadXmlData'
              // pointe vers une action Struts sur le serveur
         }),
         reader : new Ext.data.XmlReader({
              record: 'record',
              totalRecords: 'total'
         }, [
              {name: 'monNom01', type: 'float'},
              // une dizaine comme ça
         ])
    });
    store.load({params: {start: 0, limit: 10}});
    var grille = new Ext.grid.GridPanel({
         // Configuration de ma grille
         store: store,
         bbar: new Ext.PagingToolbar({
              pageSize: 10,
              store: store,
              displayInfo: true,
              displayMsg: 'Résultats {0} - {1} sur {2}',
              emptyMsg: 'Pas de résultats'
         })
    });
    C'est la suite du thread que j'avais lancé ici pour ceux que ça intéresse.

    Mako

    Edit: J'ai légèrement modifié mon code (XmlStore au lieu de Store) mais sans plus de résultat

    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
     
    var store = new Ext.data.XmlStore({
         url: 'monURL/monAction.do?method=loadXmlData'
         // pointe vers une action Struts sur le serveur
         record: 'record',
         totalRecords: 'total'
         fields: [
              {name: 'monNom01', type: 'float'},
              // une dizaine comme ça
         ])
    });
    store.load({params: {start: 0, limit: 10}});
    var grille = new Ext.grid.GridPanel({
         // Configuration de ma grille
         store: store,
         bbar: new Ext.PagingToolbar({
              pageSize: 10,
              store: store,
              displayInfo: true,
              displayMsg: 'Résultats {0} - {1} sur {2}',
              emptyMsg: 'Pas de résultats'
         })
    });

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Suite à une réponse sur le forum de Ext JS, j'ai appris d'où venait le problème. En fait, avec le code en l'état, c'est le serveur qui devrait s'occuper d'envoyer uniquement les données correspondant à la page. Pour contrer cela, je fais donc la pagination en local, ce qui donne, avec ce plugin (fichier PagingStore3_v0.4.1 zip), avec le code suivant :

    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
     
    var store = new Ext.ux.data.PagingStore({
         url: 'monURL/monAction.do?method=loadXmlData'
         // pointe vers une action Struts sur le serveur
         autoLoad: {params: {start: 0, limit: 10}},
         reader: new Ext.data.XmlReader({
              record: 'record',
              totalRecords: 'total'
          }, [
              {name: 'monNom01', type: 'float'},
              // une dizaine comme ça
         ])
    });
    var grille = new Ext.grid.GridPanel({
         // Configuration de ma grille
         store: store,
         bbar: new Ext.PagingToolbar({
              pageSize: 10,
              store: store,
              displayInfo: true,
              displayMsg: 'Résultats {0} - {1} sur {2}',
              emptyMsg: 'Pas de résultats'
         })
    });
    Le soucis, c'est que au départ, toutes mes données sont chargées ce qui peut être un peu lent au démarrage. Par contre, comme les données sont en local par la suite, le changement de pages se fait instantanément.

    Pour rester dans l'idée de départ, j'aimerai réussir à passer les paramètres de start et limit au serveur, mais je ne vois pas trop comment faire. Si quelqu'un a une idée...

    Mako

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    En creusant un peu, j'ai trouvé la réponse à ma question. Pour passer des paramètres au serveur, j'ai fait comme ceci. Côté client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    store.load({params: {start: 0, limit: 10}}); // ou la même chose avec un autoload
    Côté serveur, dans mon code JAVA:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int start = Integer.parseInt(request.getParameter("start"));
    int limit = Integer.parseInt(request.getParameter("limit"));
    Mako

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

Discussions similaires

  1. Pagination dans une grille
    Par Mako 5013 dans le forum Ext JS / Sencha
    Réponses: 19
    Dernier message: 21/05/2010, 08h44
  2. Réponses: 3
    Dernier message: 16/10/2006, 11h06
  3. Classer des rectangles dans une grille régulière
    Par Rodrigue dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/09/2006, 13h38
  4. Fuison de cellule dans une grille
    Par AlexB59 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/11/2005, 16h25
  5. Réponses: 10
    Dernier message: 19/09/2005, 22h24

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