Bonjour à tous,
j'utilise JSF1.2, Facelet 1.1.14, RichFaces 3.3.2 sur glassfish 2.1.
Pour lister toute une série d'enregistrements, j'utilise un extendedDataTable :
En suite, j'utilise un dataScroller pour paginer ce tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <rich:extendedDataTable rows="20" noDataLabel="#{activitiesBundle['tab.noDataLabel']}" width="auto" value="#{ActivitiesMB.activitiesDataModel}" selection="#{ActivitiesMB.selection}" selectionMode="multi" var="fant" id="table" rowKeyVar="row">
Tout ceci marche très bien mais pour créer mon datamodel je fais appel à des EJB censés récupérer tous mes enregistrements :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <rich:datascroller align="center" for="table" page="#{ActivitiesMB.numPage}"/>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @NamedQuery(name = "Activities.findAll", query = "SELECT a FROM Activities a", hints={@QueryHint(name="toplink.refresh", value="true")})Ma question est simple : Dans le cas ou j'ai, imaginons, 100 000 enregistrements, mon EJB va me créer une liste de 100 000 objets ? Dans ce cas, existe-t-il un moyen de ne récupérer que les enregistrements à afficher histoire de décharger le serveur et ceci en prenant en compte les tris et filtres du extendedDataModel ?
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
30
31
32
33 public ExtendedTableDataModel<Activities> getActivitiesDataModel() { this.listAct = this.activitiesDAO.findAll(); //appelle simple a la NamedQuery défini au dessus //if (dataModel == null) { dataModel = new ExtendedTableDataModel<Activities>(new DataProvider<Activities>(){ private static final long serialVersionUID = 5054087821033164847L; public Activities getItemByKey(Object key) { for(Activities a : listAct){ if (key.equals(getKey(a))){ return a; } } return null; } public List<Activities> getItemsByRange(int firstRow, int endRow) { return listAct.subList(firstRow, endRow); } public Object getKey(Activities item) { return item.getId(); } public int getRowCount() { return listAct.size(); } }); //} return dataModel; }
Partager