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

Servlets/JSP Java Discussion :

[JSP] Comment faire une pagination dans une page JSP?


Sujet :

Servlets/JSP Java

  1. #1
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut [JSP] Comment faire une pagination dans une page JSP?
    Bonjour,
    j'ai plusieurs données à afficher dans une page, je souhaite faire une pagination , pour que je puisse basculé d'une page à autre, par exemple la premier page affiche 50 enregistrement le deuxiéme page va afficher les 50 suivantes ainsi de suite ...

    Merci d'avance pour votre réponse !!!

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Et bien il va surement falloir passer par une servlet. Lorsque tu appuie sur suivant la servlet te renvoi les 50 prochains enregistrement sur ta page, bien entendu il te faut passer les informations nécessaire à ta servlet pour savoir ou en ai ta jsp.

  3. #3
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    y a pas un exemple?
    Car j'ai travailé avec la pagination en php, et ca était trés bien, il y a une classe en php qui fait le tous !
    Est ce qu'il existe un exemle en java équivalent à cette classe? ou bien il fallait que je la crée moi même ?

    Merci d'avance !!!

  4. #4
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Perso je n'en connais pas en java. Mais cela ne veut pas dire qu'il n'en existe pas, meme si j'y crois que moyennement qu'il y en ai une qui le fasse, car ce serait plus sous la forme d'un taglib. Et les taglib en jsp c'est toujours assez precis.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    displaytag

  6. #6
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    comment c'est avec displaytag?

  7. #7
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    DisplayTag ce n'est pas seulement avec Struts?

  8. #8
    Membre expérimenté Avatar de willoi
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    1 355
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 355
    Points : 1 639
    Points
    1 639
    Par défaut
    j utilise value list handler qui te genere des listes avec la pagination le tout avec des tags :

    http://valuelist.sourceforge.net/

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Juste regardé les "live exemples" http://displaytag.homeip.net/display...ple-paging.jsp

    view source

    Citation Envoyé par maxf1
    DisplayTag ce n'est pas seulement avec Struts?
    Non pas uniquement avec struts, du temps que tu puisses récupérer une variable qui contient une liste

  10. #10
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    oui j'ai regardé ton exemple, mais ce que j'ai pas compris c'est ca :
    <display:table name="sessionScope.test" pagesize="10">
    <display:column property="id" title="ID" />
    <display:column property="name" />
    <display:column property="email" />
    <display:column property="status" />
    </display:table>

    qu'est ce que ca signifie, car j'ai pas encore travailé avec Struts !!!

    Merci encore !

  11. #11
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir,
    <display:table correspond a l'utilisation de la taglib de display tag. Ca n'a rien avoir avec struts. Cette taglib genere ensuite le HTML, ceci permet d'ecire des JSP plus proprement que de generer le HTML dans ta JSP en mettant du code JAVA.

    Pour utiliser une taglib tu dois :
    1. Mettre le jar display tag displaytag-1.1.jar (et les autres jars dont il depend, voir doc) dans le repertoire WEB-INF/lib
    2. definir la taglib en haut de ta JSP
    <%@ taglib uri="/WEB-INF/displaytag-el-12.tld" prefix="display" %>
    Dans mon example la tld (description de la taglib) est place dans WEB/INF
    3. Utiliser ta taglib

    <display:table name="sessionScope.test" pagesize="10">
    <display:column property="id" title="ID" />
    <display:column property="name" />
    <display:column property="email" />
    <display:column property="status" />
    </display:table>

    Dans cet exemple on veut afficher une Collection stocke dans la session sous la cle test. La collection contient des objets qui ont des getters getId(), getName(), ...

    ceci generera une liste HTML avec les colonnes id, name,...

    C'est une explication tres simpliste, je te conseille de lire la doc de diplaytag pour plus d'information.

    Par contre il est important de savoir qu'il existe 2 techniques de paginations :
    1. pagination effectue en JAVA. Toutes les donnees sont charges une fois et la pagniation s'effectue en JAVA. Cette technique qui est la plus simple a mettre en place peut etre catastrophoque en termes de performances si tu as enormement de donnees en base.

    2. pagniation au niveau base de donnees. Elle est plus complexe a mettre en place, mais d'apres mon experience je la trouve la plus performante.

    Displaytag te permet de gerer les 2 cas, (dans ton example on charge toutes les donnees et c'est display tag qui s'occupe de la pagination). Il est possible d'implementer ta propre pagination (que tu peux plugger avec la base).
    J'ai implementer la pagination au niveau base avec hibernate dans mon projet open source gestcv http://gestcv.sourceforge.net/fr/index.html (voir classe PaginatedListImpl)
    J'ai parle de la pagination sur http://gestcv.sourceforge.net/fr/arc...onctionnalites

    Angelo

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    2. pagniation au niveau base de donnees. Elle est plus complexe a mettre en place, mais d'apres mon experience je la trouve la plus performante.
    aucune complexité la dedans il suffit de charger les données avec un index et un max

  13. #13
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir alexandre.
    je t'avoues que j'ai passe pas mal de temps a implementer proprement l'interface PaginedList de Display tag.

    Display tag implemente par defaut la pagination au niveau JAVA, et je pense que pour quelqu'un qui debute c'est la solution la plus simple.

    Je ne croies pas que la pagination au niveau base soit si triviale que ca. Il faut bien comprendre comment marche la pagination : obtenir le nombre totales d'enregistrement et obtenir les items a afficher. De plus d'une base a une autre les drivers JDBC supportent ou non les result set scrollable ou non.

    Angelo

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    définir un total page, un max row by page est franchement trivial je pense ...ca demande peut être de s'intéressé un minimum au fonctionement du composant mais franchement c'est de loin pas surmontable

    si tu te bases sur jdbc je ne connais pas de pas de sgdb qui ne supporte pas de LIMIT (ou alors ne respectant pas la normalisation SQL)

    et tu dois effectivement effectué un select count(*) ... pour obtenir de toute facon le nombre total d'enregistrement mais ...

    au niveau hibernate tu dois également de définir ca au niveau d'un criteria

    un peu plus compliqué car il faut définir un uniqueResult ...

    au niveau EJB 3.0 tu peux le définir sur JPA avec setFirstResult et setMaxResult

    et pour le count tu dispose de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       return Integer.valueOf(em.createQuery("select count(o) from NewEntity as o ").
                    getSingleResult().
                    toString());
    quelle difficulté existe ?

    je suis pas un expert, mais je trouve pas que ca soit si compliqué que ca

    (ps scrollable n'est qu un joujou d'hibernate perso je ne comprend pas sa raison d'être)

  15. #15
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir,
    le scrollable n'est pas un joujou d'hibernate, il permet d'utiliser la fonctionnalite scrollable de JDBC pour eviter de faire un select count(*)
    Ici un petit article qui explique l'utilite de Scrollable ResultSet :
    http://www.oracle.com/technology/sam...untResult.html

    La difficulte c'est de mettre en place une architecture propre qui permettent de faire communiquer ta partie presentation avec ta couche modele. Je ne sais pas si tu as deja plugge displaytag pour faire de la pagination avec JDBC, EJB3 (moi je l'ai fait avec hibernate), bah ca n'est pas si simple (enfin bon je ne suis pas un expert, mais j'ai passe beaucoup de temps a mettre en place cette pagination).
    Faire de la pagination en respectant le decoupage ActionForm->Service->DAO tout en evitant de faire plein de code (pour recuperer les infos de tris de pagination de la couche presentation et de les transmettre a la couche service puis DAO) n'a pas ete chose simple a mettre en place.
    Si tu fais de la pagination en JAVA avec displaytag tu n'as pas besoin de gerer tout ca.

    Angelo

  16. #16
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Je vais jetter un coup d'oeil sur ce scrollable

    Par contre je vois pas l'avantage de parcourir une collection et se positionner sur le dernier element

    .
    rs.last();

    // Get the row position which is also the number of rows in the ResultSet.
    int rowcount = rs.getRow();

    J'ai des doutes sur l'efficacité un select count(*) sur 20'000 element prend 0.03 sec.

    Hors sujet :
    J'aime pas struts pour pas mal de raison, notament sur la complexité de
    l'architecture et de la communication entre l ActionForm, et la partie Model.

    La solution la plus simple que j'ai trouvé est la suivante

    http://www.avoka.com:8080/jira/browse/CLK-98

    J'ai juste modifié le comportement du composant scrollable du framework ...

    Je suis également entrain de tenter de refaire un composant dataTable pour JSF qui permet la pagination d'un large result set et je peux te dire que c'est de loin pas aussi simple que pour Click ...

  17. #17
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Le rs.last() permet d'eviter de faire deux requetes SQL. une seule suffit pour recuperer le nombre d'enregistrement. Mais tu as raison, il vaut mieux tester (et ca depend de la base de sonnees que tu utilises, tous les drivers JDBC ne le supportent pas).

    Concernant Struts, je suis d'accord avec toi, l'ActionForm est assez penible. Avec WebWork tu n'est pas oblige d'utilise une ActionForm, tu peux directement mapper ton objet modele (DTO,BO,...) a ta page (voir interface modedriven)

    Angelo.

  18. #18
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Points : 2 336
    Points
    2 336
    Par défaut
    Je connais pas du tout webWork je vais jetter un coup d'oeil

  19. #19
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Tu peux utiliser setMaxResult(int) et setFirstResult(int) sur un objet Criteria ou Query ou SQLQuery d'hibernate pour gérer les blocs d'enregistrements.

    Avec un statement sql, tu as setMaxRows(int) et absolute(int) sur le ResultSet pour gérer ça.
    (le statement doit être obtenu comme ceci createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); )

    C'est très simple à mettre en oeuvre

    A+

  20. #20
    Membre habitué Avatar de adil_vpb
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Août 2006
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 326
    Points : 132
    Points
    132
    Par défaut
    rebonjour,
    je reviens toujours sur ma question que j'ai postulé ca fait plus que deux semaine!
    maintenant j'ai besoin vraiment une pagination dans mes pages JSP, car j'affiche des tables dynamiquement (par exemple j'affiche une table qui présente un suivi du mois Avril c'a veut dire que j'aurais un peu prés 28 lignes ! ) et il faut que j'imprime ces valeurs dans des feuilles !

    si une personne a travaillé déjà sur ca , préire de l'aider pour résoudre ca le plus temps possible !



    Merci d'avance !
    j'ai besoin d'un simple exemple concrét! et moi je prend en charge la suite !

    Merci !

Discussions similaires

  1. Réponses: 15
    Dernier message: 26/01/2015, 19h37
  2. Réponses: 3
    Dernier message: 29/04/2008, 14h14
  3. Réponses: 1
    Dernier message: 04/04/2008, 12h14
  4. Comment faire un "remplacer" dans une colonne d'une table ?
    Par arnaudperfect dans le forum Requêtes
    Réponses: 7
    Dernier message: 22/02/2008, 12h32
  5. Réponses: 8
    Dernier message: 16/02/2007, 15h55

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