Fala Tropa! ao utilizar a versão 3.1M1 do prime faces pra frente current (3.4-SNAPSHOT ), notei uma certa dificuldade em realizar aquele filtro padrão do p:dataTable do primefaces, alguem sabe onde esta meu erro? vou postalo aqui…
Visualização Material
<p:dataTable id="tabelaMaterial" emptyMessage="Sem registros" var="material" value="#{materialBean.materiaisLazy}"
paginator="true" rows="10" lazy="true"
rowsPerPageTemplate="10,15,30" rowKey="#{material.id}"
rowStyleClass="#{material.gerado == true ? 'color':null or material.statusOPEC == 'Reprovado' ? 'colorY' : null or material.statusEng == 'Reprovado' ? 'colorY':null or material.statusEng == 'Ap. Ressalva' ? 'colorZ' : null or material.statusOPEC == 'Rep. Cliente' ? 'colorZ' : null }">
<f:facet name="header">
<p:outputPanel style="position: static;text-align: left">
<h:outputLabel value="Buscar Material por unidade: "/>
<h:selectOneMenu id="escolheUnidade" value="#{materialBean.unidadeBusca}">
<f:selectItem id="a" itemLabel="TODOS" itemValue="todos" />
<f:selectItems id="b" value="#{materialBean.unidades}" var="uni" itemValue="#{uni.unidade}" itemLabel="#{uni.unidade}"/>
<f:ajax event="change" render="tabelaMaterial" listener="#{materialBean.buscarMaterialUnidade}"/>
</h:selectOneMenu>
</p:outputPanel>
</f:facet>
<p:column style="font-size: x-small;width: 3%">
<p:commandButton id="obsRelevantes" icon="ui-icon-extlink" disabled="#{material.observacaoOpeRep !=null or material.observacaoCli != null or material.observacaoOpe != null ? false:true}" oncomplete="obsMaterial.show()" update=":formObsMaterial" title="Informações relevantes da engenharia sobre o material: #{material.titulo}">
<f:setPropertyActionListener value="#{material}" target="#{materialBean.material}"/>
</p:commandButton>
</p:column>
<p:column headerText="Titulo" filterBy="#{material.titulo}" filterMatchMode="contains" filterStyle="width:100%;" style="font-size: x-small">
<h:outputText value="#{material.titulo}"/>
</p:column>
<p:column headerText="Tempo" filterBy="#{material.duracao}" filterMatchMode="contains" filterStyle="width:70%;" style="font-size: x-small;width: 4em">
<h:outputText value="#{material.duracao}"/>
</p:column>
<p:column headerText="Cliente" filterBy="#{material.cliente.cliente}" filterMatchMode="contains" filterStyle="width:70%;" >
<h:outputText value="#{material.cliente.cliente}"/>
</p:column>
<p:column headerText="Data Material" style="font-size: x-small">
<h:outputText value="#{material.dataMaterial}">
<f:convertDateTime pattern="dd/MM/yyyy HH:mm" timeZone="America/Sao_Paulo"/>
</h:outputText>
</p:column>
<p:column headerText="Usuario Opec">
<h:outputText value="#{material.operador}"/>
</p:column>
<p:column headerText="Stat. Opec" style="width: 4em">
<h:outputText value="#{material.statusOPEC}"/>
</p:column>
<p:column headerText="Stat. Eng." style="width: 4em">
<h:outputText value="#{material.statusEng}"/>
</p:column>
<p:column style="width: 12em" rendered="#{permissoesBean.listaFuncaoADMIN or permissoesBean.listaFuncaoGESTOR or permissoesBean.listaFuncaoOPEC}">
<p:commandButton id="reprovaCli" icon="ui-icon-cancel" update=":formMaterial :mensageMaterial :reprovarCliente" title="Reprovado Pelo Cliente" onclick="reprovarCli.show();" disabled="#{material.statusEng =='Rep. Cliente' or material.statusOPEC =='Rep. Cliente' ? true:false || login.unidade == material.unidade ? false:true}">
<f:setPropertyActionListener value="#{material}" target="#{materialBean.material}"/>
</p:commandButton>
<p:commandButton id="liberar" icon="ui-icon-transferthick-e-w" title="Liberar material para gerar novamente" actionListener="#{materialBean.liberarGerancao}" update=":mensageMaterial :formMaterial" disabled="#{login.unidade == material.unidade and material.gerado == true ? false:true}">
<f:attribute name="material" value="#{material}"/>
<f:attribute name="geracao" value="#{geracaoBean.geracao}"/>
</p:commandButton>
<p:commandButton icon="ui-icon-pencil" title="Alterar" disabled="#{login.unidade == material.unidade ? false:true}" actionListener="#{materialBean.alterar}"
oncomplete="window.open(href='#{facesContext.externalContext.request.contextPath}/view/opec/materialGerenciador.xhtml','centro')">
<f:attribute name="materialAlterar" value="#{material}"/>
</p:commandButton>
<p:commandButton icon="ui-icon-trash" title="Deletar" onclick="confirmation.show();" disabled="#{login.unidade == material.unidade ? false:true}">
<f:setPropertyActionListener value="#{material}" target="#{materialBean.material}"/>
</p:commandButton>
</p:column>
</p:dataTable>
meu MaterialBean apenas a parte onde a consulta é chamada
@ManagedBean
@SessionScoped
public class MaterialBean extends EmailUtils implements Serializable {
private Material material = new Material();
@EJB
private MaterialFacade materialFacade
private LazyDataModel<Material> materiaisLazy;
private List<Material> materiaisAprovados = new ArrayList<Material>();
public MaterialBean() {
data = new Date();
}
@PostConstruct
public void init() {
materiaisLazy = new LazyMaterialDataModel(materialFacade.consultaMaterialUnidade(unidadeBusca));
}
//Getters and Setters
Minha classe LazyDataModel
public class LazyMaterialDataModel extends LazyDataModel<Material> implements Serializable{
private List<Material> datasource;
public LazyMaterialDataModel(List<Material> datasource) {
this.datasource = datasource;
}
@Override
public Material getRowData(String rowKey) {
for (Material material : datasource) {
if (material.getId().equals(rowKey)) {
return material;
}
}
return null;
}
@Override
public Object getRowKey(Material material) {
return material.getId();
}
@Override
public List<Material> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
List<Material> data = new ArrayList<Material>();
//filter
for (Material material : datasource) {
boolean match = true;
for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
String filterValue = filters.get(filterProperty);
String fieldValue = String.valueOf(material.getClass().getField(filterProperty).get(material));
if (filterValue == null || fieldValue.startsWith(filterValue)) {
match = true;
} else {
match = false;
break;
}
} catch (Exception e) {
match = false;
}
}
if (match) {
data.add(material);
}
}
// sort
// if (sortField != null) {
// Collections.sort(data, new LazySorter(sortField, sortOrder));
// }
//rowCount
int dataSize = data.size();
this.setRowCount(dataSize);
//paginate
if (dataSize > pageSize) {
try {
return data.subList(first, first + pageSize);
} catch (IndexOutOfBoundsException e) {
return data.subList(first, first + (dataSize % pageSize));
}
} else {
return data;
}
}
}
Por fim minha consulta Criteria…
public List<Material> consultaMaterialUnidade(String unidade) {
Session session;
if (em.getDelegate() instanceof EntityManagerImpl) {
EntityManagerImpl entityManagerImpl = (EntityManagerImpl) em.getDelegate();
session = entityManagerImpl.getSession();
} else {
session = (Session) em.getDelegate();
}
List<Material> materiais = new ArrayList<Material>();
Criteria crit = session.createCriteria(Material.class);
crit.createAlias("unidade", "u");
crit.add(Restrictions.eq("u.unidade", unidade));
crit.addOrder(Order.desc("dataMaterial"));
return crit.list();
}
NOTA: ALGUEM ME AJUDA!!!