Segue meu código:
public class LivroDataModel extends LazyDataModel<Livro>{
private DAO<Livro> dao = new DAO<Livro>(Livro.class);;
public LivroDataModel() {
super.setRowCount(dao.quantidadeDeElementos());
}
@Override
public List<Livro> load(int inicio, int quantidade, List<SortMeta> multiSortMeta, Map<String, Object> filtros) {
String titulo = (String) filtros.get("titulo");
return dao.listaTodosPaginada(inicio, quantidade, "titulo", titulo);
}
}
public int quantidadeDeElementos() {
EntityManager em = new JPAUtil().getEntityManager();
long result = (Long) em.createQuery("select count(n) from " + classe.getSimpleName() + " n")
.getSingleResult();
em.close();
return (int) result;
}
public List<T> listaTodosPaginada(int firstResult, int maxResults, String coluna, String valor) {
EntityManager em = new JPAUtil().getEntityManager();
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
query.select(query.from(classe));
Root<T> root = query.from(classe);
if(valor != null)
query = query.where(em.getCriteriaBuilder().like(root.<String>get(coluna), valor + "%"));
List<T> lista = em.createQuery(query).setFirstResult(firstResult)
.setMaxResults(maxResults).getResultList();
em.close();
return lista;
}
<h:form id ="formTabelaLivros">
<p:dataTable value="#{livroBean.livroDataModel}" var="livro" id="tabelaLivros"
paginator="true" rows="5" lazy="true">
@ViewScoped
@ManagedBean
public class LivroBean implements Serializable {
private LivroDataModel livroDataModel = new LivroDataModel();
public LivroDataModel getLivroDataModel() {
return livroDataModel;
}
public void setLivroDataModel(LivroDataModel livroDataModel) {
this.livroDataModel = livroDataModel;
}
Fiz tudo como explicado no exercício, mas ocorre um erro no lado do servidor "Lazy loading is not implemented"