Olá pessoal,
estou com problema para filtrar os dados da p:dataTable, para fazer isso estou usando o "filterBy " na coluna da tabela. Mas o problema é que esta filtrando nada. XHTML:<p:dataTable id="dtCarroceria" value="#{carroceriaMBean.lazyModel}" lazy="true" var="item" paginator="true" rows="5" paginatorAlwaysVisible="false"
emptyMessage="#{msgs.dtVazia}" rowsPerPageTemplate="5,10,15" selection="#{carroceriaMBean.selectedCarrocerias}"
rowIndexVar="rowIx" rowStyleClass="#{empty rowIx or rowIx mod 2 ne 0 ? 'even-row' : 'odd-row'}" rowKey="#{item.codigocarroceria}">
<p:column selectionMode="multiple" id="selecao" />
<p:column id="clnCodCarroceria" sortBy="#{item.codigocarroceria}" filterBy="#{item.codigocarroceria}">
<f:facet name="header">
<h:outputText id="optCodigoCarroceria" value="#{msgs.optTableCodigoTipoCarroceria}" />
</f:facet>
<h:outputText value="#{item.codigocarroceria}"/>
</p:column>
<p:column id="clnDescricaoCarreta" sortBy="#{item.descricao}" filterBy="#{item.descricao}">
<f:facet name="header">
<h:outputText id="optDescricaoCarroceria" value="#{msgs.optTableDescTipoCarroceria}" />
</f:facet>
<h:outputText value="#{item.descricao}"/>
</p:column>
<f:facet name="footer">
<h:outputText value="#{msgs.contaRegistros} #{carroceriaMBean.lazyModel.rowCount}" />
</f:facet>
</p:dataTable>
private void init() {
lazyModel = new LazyDataModel<Carroceria>() {
@Override
public List<Carroceria> load(final int index, final int count, final String sortField, final SortOrder sortOrder,
final Map<String, String> filters) {
final List<Carroceria> toReturn = carroceriaService.getListaPaginado(index, count, sortField, sortOrder, filters);
if (ehParaContar) {
rowCount = carroceriaService.count();
lazyModel.setRowCount(rowCount);
ehParaContar = false;
}
return toReturn;
}
};
rowCount = carroceriaService.count();
lazyModel.setRowCount(rowCount);
}
public List<Carroceria> getListaPaginado(int index, int count, String sortField, SortOrder sortOrder, Map<String, String> filters) {
Session s = getSession();
Criteria crit = s.createCriteria(Carroceria.class);
if (sortField != null && !sortField.isEmpty()) {
if (sortOrder == SortOrder.ASCENDING) {
crit = crit.addOrder(Order.asc(sortField));
} else {
crit = crit.addOrder(Order.desc(sortField));
}
}
if (!filters.isEmpty()) {
Iterator<Entry<String, String>> iterator = filters.entrySet().iterator();
while (iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
crit.add(Restrictions.ilike(entry.getKey(), entry.getValue(), MatchMode.ANYWHERE));
}
}
return crit.setFirstResult(index).setMaxResults(count).list();
}