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
Voici le code xhtml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } } }
Merci d'avance pour votre aide,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Partager