L'implémentation du lazy loading était assez complexe dans les versions de PrimeFaces inférieures à la version 11.
La version 11 fournit la classe org.primefaces.model.JpaLazyLoadingDataModel<T>
qui simplifie énormément cette implémentation.
Pas beaucoup de changements ; dans <p:dataTable>
:
value
doit désigner une méthode de backing bean qui retourne une valeur de type org.primefaces.model.LazyDataModel<CompteBancaire>
(classe de PrimeFaces) au lieu de List<CompteBancaire>
;lazy="true"
;rows
(nombre de lignes affichées) avec une valeur ; par exemple rows="4"
.Il utilise la classe JpaLazyDataModel<CompteBancaire>
pour implémenter la méthode désignée par l'attribut value
. Cette classe hérite de JpaLazyLoadingDataModel<T>
.
L'instance de cette classe, est créé à la création du backing bean (méthode annotée avec @PostConstruct
; revoyez le cours sur CDI).
Page Web qui contient la table :
<p:dataTable value="#{listeComptes_lazy.model}" rows="4" lazy="true" ...>
Backing bean :
@Named(value = "listeComptes_lazy") @ViewScoped public class GestionComptesBeanLazy implements Serializable { private LazyDataModel<CompteBancaire> model; @PersistenceContext
private EntityManager em; @PostConstruct public void init() { this.model = new JpaLazyDataModel<>(CompteBancaire.class, () -> em, "id"); } public LazyDataModelgetModel() { return model; } ... }
Lisez la javadoc sur les constructeurs de la classe JpaLazyDataModel
et la documentation de dataTable pour bien comprendre ce code.