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 : 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;
    }
  }

}
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
<!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,