Temps de rendu lamentable : Colonnes dynamiques et Lazy loading
Bonjour,
Je me remets aux experts de developpez.com car j'ai pas trouvé la solution à mon problème.
J'ai un p:datatable où les colonnes sont créés dynamiquement et j'utilise en même temps le lazy loading en espérant accélerer la navigation entre les différentes pages du datatable.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<p:dataTable id="resultDatatable" var="op" widgetVar="resultDatatable"
styleClass="styleTable" lazy="true"
value="#{myBean.lazyResults}"
emptyMessage="Aucune opération trouvée." paginator="true" rows="10">
<p:columns var="column" value="#{myBean.columns}"
columnIndexVar="colIndex" sortBy="#{op[column.property]}">
<f:facet name="header">
<h:outputText value="#{column.header}" />
</f:facet>
<h:outputText value="#{op.attributes.get(column.property)}" />
</p:columns>
</p:dataTable> |
Pour des raisons de complexité, je suis obligé de loader les infos à partir de la mémoire :
Code:
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 class OperationLazyDataModel extends LazyDataModel<OperationSearchModel> {
private List<OperationSearchModel> datasource;
public OperationLazyDataModel(List<OperationSearchModel> datasource) {
super();
this.datasource = datasource;
}
@Override
public List<OperationSearchModel> load(int first, int pageSize,
String sortField, SortOrder sortOrder, Map<String, String> filters) {
if (sortField != null) {
try {
Collections.sort(datasource, new LazySorter(sortField,
sortOrder));
} catch (Exception e) {
}
}
int dataSize = datasource.size();
setRowCount(dataSize);
if (dataSize > pageSize) {
try {
return datasource.subList(first, first + pageSize);
} catch (Exception e) {
return datasource.subList(first, first + (dataSize % pageSize));
}
} else
return datasource;
}
} |
Le problème c'est au niveau du rendu du datatable qui prend en moyenne 5 secondes pour afficher une page alors que les données sont déjà récupérées à partir de la mémoire.
J'ai besoin de comprendre pourquoi ce temps de rendu.
J'utilise PF4 (je ne peux upgrader pour eviter des regressions sur d'autres parties de l'application).
Merci pour vos réponses.