Aide pour le lazy loading

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.

Page JSF

Pas beaucoup de changements ; dans <p:dataTable> :

Backing bean

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).

Exemple de page et backing bean

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 LazyDataModel getModel() { return model; } ... }

Lisez la javadoc sur les constructeurs de la classe JpaLazyDataModel et la documentation de dataTable pour bien comprendre ce code.