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 :

DataTable & Pagination


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut DataTable & Pagination
    Bonjour,

    J'ai commencé à développer une application. La couche présentation est basée sur les JSF. Je dois développer plusieurs écrans de recherche avec des données paginées/chargées à la demande.

    Sur une page, j'ai un composant datatable défini comme suit :
    <h:dataTable value="backingBean.data"> (en fait ice:dataTable car je suis sur iceFaces)

    Le backingBean associé est le 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
    25
    26
    27
    28
    29
    public class Backing {
     
         private CustomDataTable data = null;
         private int pageSize = 10;
         private ISearchService service;
     
         public getData() {
              if (data == null) { return new LocalCustomDataTable(pageSize) }
              else { return data }
         }
     
         public fetchData(int startRow, int endRow) {
              int totalCount = service.getTotalCount();
              List<DTO> result = service.search();
              ....
         }
     
              /** Classe interne permettant de founir un mécanisme de callback */
              private class LocalCustomDataTable extens CustomDataTable {
                   /** Constructeur */
                   public LocalCustomDataTable(int size) {
                        super(size);
                   }
                   /** Méthode redéfinie */
                   public fetchPage(startRow, endRow) {
                        fetchData(startRow, endRow);
                   }
              }
    }
    Quand ma page est interprétée, le composant dataTable présent sur la page appelle la métode getData() de mon backing bean. Cette méthode lui renvoit un CustomDataTable qui représente un dataTable paginé. La pagination est effectuée grâce à une fonction de callBack qui appelle un service métier dans le backingBean.

    Mon problème est le suivant :
    C'est le composant dataTable qui va chercher ses données en base de données quand la page est interprétée. Si il y a une erreur dans la méthode fetchData, cela entraîne une erreur qu'il est impossible d'afficher correctement sur la page.

    J'ai ensuite essayé de procéder autrement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class BackingBean {
         private ListDataTable data;
         private ISearchService service;
         private int beginIndex;
         private int endIndex;
         public goNext() { ... }
         public goPrevious { ... }
    }
    et sur ma page en dessous du composant datatable, j'ai des liens Next et Previous.
    Avec cette technique, si goNext ou goPrevious renvoie une erreur, je peux créer un FacesMessage et l'afficher sur la page. Je peux gérer les erreurs proprement.
    Mais le souci est que j'ai quelque-chose de graphiquement rudimentaire. Pour l'exemple précédent, j'ai sur la page un composant de pagination lié au dataTable (le composant paginator de IceFaces). Ce composant rend bien mieux que mes liens Next et Previous. Il se présente comme suit : << < 1 2 3 > >> et possède tout un tas d'options.
    Mes questions sont au final les suivantes :
    1 - Faut-il préférer la méthode 2 à la méthode 1 ? ou au contraire est-ce bien pensé de laisser le composant dataTable requêter tout seul la base de données ? si oui il faut m'expliquer comment gérer correctement les erreurs.
    2 - Quelqu'un a-t-il trouvé une solution correcte pour paginer un tableau avec un composant de pagination qui tient la route graphiquement ?
    3 - Quelqu'un a-t-il une autre solution que les méthodes 2 et 3 ?

    J'attend vos retours. J'aimerai voir comment s'y retrouver avec JSF.
    Merci d'avance.
    Julien.

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    IceFaces propose le composant dataPaginator. Pourquoi ne pas l'utiliser dans ton cas ?



    ps : Fais attention avec tes "copier coller" de ton code Java, celui-ci contient plein d'erreurs...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut A-t-on vraiment lu mon message et compris mon problème ?
    Bien entendu mon code n'est pas complet, c'est un pseudo code pour comprendre une idée. Et pour le datapaginator de icefaces, je le connais, j'en parle dans mon message. Il faudrait lire plus attentivement ce que j'ai écrit avant de répondre.
    Merci.
    ps : Et si je n'ai pas été explicite, n'hésitez pas à me poser des questions.

  4. #4
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 13
    Par défaut Exprimé d'un autre façon
    Exprimé d'un autre façon, je veux dire que sur le clic des boutons Next etc. du composant paginator de icefaces, je ne peux pas déclencher une action de mon choix. J'ai été obligé de customiser le datatable lié au paginator, ce qui fait que la recherche des données en base de données se fait lorsque le composant de la page est interprété et non sur le clic du bouton Next etc.
    Je préfèrerai fournir des données aux composants plutôt que de laisser les composants aller chercher leurs données. Ou alors je veux bien mais il faut m'expliquer comment gérer les erreurs quand la recherche des données échoue pour une raison XY.

Discussions similaires

  1. Tri et pagination datatable JSF Tomahawk
    Par midosd dans le forum JSF
    Réponses: 0
    Dernier message: 12/01/2012, 11h16
  2. Affichage pagination <p:dataTable>
    Par Philog dans le forum JSF
    Réponses: 1
    Dernier message: 23/07/2010, 09h14
  3. Réponses: 2
    Dernier message: 21/08/2009, 14h26
  4. Réponses: 2
    Dernier message: 15/06/2009, 18h40
  5. pagination avec dataTable
    Par dude666 dans le forum JSF
    Réponses: 4
    Dernier message: 28/08/2006, 11h23

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