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 :
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">
En suite, j'utilise un dataScroller pour paginer ce tableau :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
<rich:datascroller align="center" for="table" page="#{ActivitiesMB.numPage}"/>
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
 
@NamedQuery(name = "Activities.findAll", query = "SELECT a FROM Activities a", hints={@QueryHint(name="toplink.refresh", value="true")})
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;
	}
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 ?