[PrimeFaces] Lazy datatable filter (selectCheckboxMenu)
Bonjour à tous,
Dans une datatable de type lazy, j'ai placé différents filtres.
J'aimerais ajouter des filtres de type selectCheckboxMenu, permettant de cocher un élément d'une liste de paramètre correspond à une colonne.
Malheuresement celle-ci ne marche pas et je pense que cela vient de la méthode "load" du lazyModel:
J'ai mis en gras et en rouge, dans le code java, le morceau de code qui est, je pense, la cause de problème;
Dans le code XHLTM j'ai mis en commentaire (<!-- --), le moment ou je veux utiliser un selectedcheckboxmenu
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| public class LazyJDBProdModel extends LazyDataModel<JdbProd> {
private static final long serialVersionUID = 598326244712451024L;
// ===========================================================================
// CONSTANTES
// ===========================================================================
// ===========================================================================
// ATTRIBUTS
// ===========================================================================
private List<JdbProd> datasource;
// ===========================================================================
// METHODES
// ===========================================================================
public LazyJDBProdModel(List<JdbProd> datasource){
this.datasource = datasource;
}
@Override
public List<JdbProd> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) {
List<JdbProd> data = new LinkedList <JdbProd>();
//filter
for(JdbProd jdbpro : datasource) {
boolean match = true;
if (filters != null) {
for (Iterator<String> it = filters.keySet().iterator(); it.hasNext();) {
try {
String filterProperty = it.next();
Object filterValue = filters.get(filterProperty);
Field privateStringField = jdbpro.getClass ().getDeclaredField(filterProperty);
privateStringField.setAccessible(true);
String fieldValue = String.valueOf(privateStringField.get (jdbpro));
if(filterValue == null || fieldValue.startsWith(filterValue.toString())) {
match = true;
}
else {
match = false;
break;
}
} catch(Exception e) {
match = false;
}
}
}
if(match) {
data.add(jdbpro);
}
}
//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;
}
}
} |
Voici le code xhtml:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<h:form id="fileSelection" name="fileSelection"
enctype="multipart/form-data">
<p:growl id="messages" showDetail="true" />
<p:fileUpload value="#{jdbUploadBean.file}"
fileUploadListener="#{jdbUploadBean.addFileToAttachment}"
mode="advanced" update="table" sizeLimit="3145728" multiple="true"
auto="true" />
<p:dataTable var="JdbProd" value="#{jdbUploadBean.lazyModel}"
widgetVar="table" id="table"
style="border: 0px solid;text-align:center" paginator="true"
rows="10"
paginatorTemplate="{RowsPerPageDropdown} {FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="5,10,15" lazy="true" >
<p:column headerText="Start date" sortBy="#{JdbProd.startDate}">
<h:outputText value="#{JdbProd.startDate}" />
</p:column>
<p:column filterBy="#{JdbProd.article}" sortBy="#{JdbProd.article}">
<!--
<f:facet name="filter">
<p:selectCheckboxMenu label="Articles"
onchange="PF('table').filter()" >
<f:selectItems value="#{jdbUploadBean.articleList}" />
</p:selectCheckboxMenu>
</f:facet>
-->
<h:outputText value="#{JdbProd.article}" />
</p:column>
<p:column filterBy="#{JdbProd.report}" sortBy="#{JdbProd.report}">
<h:outputText value="#{JdbProd.report}" />
</p:column> |
Merci d'avance pour votre aide,