Após implementar o LazyDataModel as colunas de ordenação não funcionam.
livro.xhtml
<h:form id="formListaLivros">
<p:dataTable value="#{livroBean.livroDataModel}" var="livro" id="tabelaLivros" paginator="true"
rows="5" lazy="true">
<f:facet name="header">Livros Cadastrados</f:facet>
<p:column headerText="Titulo" sortBy="#{livro.titulo}" filterBy="#{livro.titulo}" filterMatchMode="startsWith">
<h:outputText value="#{livro.titulo}" />
</p:column>
<p:column headerText="ISBN">
<h:outputText value="#{livro.isbn}" />
</p:column>
<p:column headerText="Valor" filterBy="#{livro.preco}" filterFunction="#{livroBean.precoEhMenor}">
<h:outputText value="#{livro.preco}">
<f:convertNumber type="currency" pattern="R$ #0.00"
currencySymbol="R$" locale="pt_BR" />
</h:outputText>
</p:column>
<p:column headerText="Lançamento">
<h:outputText value="#{livro.dataLancamento.time}">
<f:convertDateTime pattern="dd/MM/yyyy" />
</h:outputText>
</p:column>
<p:column headerText="Alterar">
<p:commandLink styleClass="ui-icon ui-icon-pencil" style="float:left;margin-right:10px"
process="@this" update=":formLivro">
<f:setPropertyActionListener value="#{livro}" target="#{livroBean.livro}"/>
</p:commandLink>
</p:column>
<p:column headerText="Excluir">
<p:commandButton action="#{livroBean.removeLivro(livro)}"
icon="fa fa-fw fa-remove" process="@this" update="tabelaLivros"/>
</p:column>
</p:dataTable>
</h:form>
LivroDataModel
public List<Livro> load(int inicio, int quantidade, String campoOrdenacao, SortOrder sentidoOrdenacao,
Map<String, Object> filtros) {
String titulo = (String) filtros.get("titulo");
return dao.listaTodosPaginada(inicio, quantidade, "titulo", titulo);
}
DAO
public List<T> listaTodosPaginada(int firstResult, int maxResults, String coluna, String valor) {
EntityManager em = new JPAUtil().getEntityManager();
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(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;
}
Obrigado.