2017-08-16 1 views
1

J'ai un dataTable avec des colonnes dynamiques.Impossible de filtrer Primefaces datatable

J'utiliser primefaces 5.3 et 2.2 jsf

Voici le code:

<h:form id="form1"> 
    <p:dataTable var="etudiant" widgetVar="etdTable" paginator="true" rows="10" 
    rowsPerPageTemplate="5,10,15" value="#{etudiantController.etudiants}" 
    lazy="false" emptyMessage="Aucune etudiant trouvé" 
    filteredValue="#{etudiantController.filteredEtudiants}"> 

     <p:column filterBy="#{etudiant.nomEtudiant}" filterMatchMode="exact"> 
      <f:facet name="header"> 
       <h:outputText value="Nom" /> 
      </f:facet> 
      <h:outputText value="#{etudiant.nomEtudiant}" /> 
     </p:column> 
     [...] 

Bean:

private List<Etudiant> etudiants; 
private List<Etudiant> filteredEtudiants; 

public List<Etudiant> getEtudiants() { 
    return etudiantService.getAllEtudiants(); 
} 

public List<Etudiant> getFilteredEtudiants() { 
    return this.filteredEtudiants; 
} 

public void setFilteredEtudiants(List<Etudiant> filteredEtudiants) { 
    this.filteredEtudiants = filteredEtudiants; 
} 

getAllEtudiants() charge tous les élèves.

Exception:

java.lang.NullPointerException 
at org.primefaces.component.datatable.feature.FilterFeature.filter(FilterFeature.java:150) 
at org.primefaces.component.datatable.feature.FilterFeature.encode(FilterFeature.java:117) 
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:78) 
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924) 
at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863) [...] 
java.lang.IllegalStateException: CDATA tags may not nest 
at com.sun.faces.renderkit.html_basic.HtmlResponseWriter.startCDATA(HtmlResponseWriter.java:681) at javax.faces.context.ResponseWriterWrapper.startCDATA(ResponseWriterWrapper.java:179)[...] 

quelque chose ne va pas ici ??

+0

Je pense que le problème est, ou du moins, il doit être résolu. Un getter dans jsf peut être appelé 100 fois juste pour montrer la page une fois. Donc, vous ne pouvez jamais appeler le db dans un getter. –

+1

Essayez ceci: https://stackoverflow.com/questions/5765853/how-and-when--load-the-model-from-database-for-hdatatable –

+0

Je l'ai chargé sur PostConstruct mais je ne travaille pas. – Spoonatte

Répondre

0

Je ne suis pas sûr mais avez-vous essayé d'inicialiser la liste?

essayez ceci:

private List<Etudiant> filteredEtudiants = new ArrayList<>();