Thiago Maltempi
Thiago Maltempi

Reputation: 78

PrimeFaces 3.5.14 DataTable using FilterBy

I'm using PrimeFaces 3.5, with a datatable that i need use a FilterBy component. In show case, it works ok: http://www.primefaces.org/showcase/ui/datatableFiltering.jsf

well, when i do my first filter, its work and it show me result, but when i do a second filter, it stop working.

See my xHTML:

                                                                                       <p:dataTable id="users" 
                                              var="user" 
                                              value="#{userMB.users}" 
                                              rowKey="#{user.id}"
                                              selection="#{userMB.userSelected}" 
                                              selectionMode="single"
                                              rows="10"
                                              paginator="true"
                                              filteredValue="#{userMB.filteredUser}"
                                              paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"

                                    >

                                    <p:column headerText="Id" >
                                        #{user.id}
                                    </p:column>

                                     <p:column headerText="Login" filterBy="#{user.login}">
                                        #{user.login}
                                    </p:column>

                                </p:dataTable>     

Observations: userMB its my managed bean, @SessionScoped users it's a List filteredUser it's a List

it's all... thank a attention :)

Upvotes: 1

Views: 9143

Answers (2)

SebastianD
SebastianD

Reputation: 765

this is a working PF3.5 datatable dont forget to wrap it inside an

<p:dataTable id="surveyTable" var="survey" value="#{surveyBean.surveys}" widgetVar="surveysTable" 
                                     emptyMessage="Keine Umfragen zu diesem Suchbegriff vorhanden" filteredValue="#{surveyBean.filteredSurveys}" 
                                     paginator="true" rows="10"  
                                     paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"  
                                     rowsPerPageTemplate="5,10,15">
                            <f:facet name="header">  
                                Liste der Umfragen 
                                <p:outputPanel>  
                                    <h:outputText value="Suchen:" />  
                                    <p:inputText id="globalFilter" onkeyup="surveysTable.filter()" style="margin-left:5px;width:150px" />  
                                </p:outputPanel>
                            </f:facet> 
                            <p:column id="idColumn" headerText="ID" filterBy="{survey.id}" filterMatchMode="contains">  
                                <h:outputText value="#{survey.id}" />  
                            </p:column>
                            <p:column id="titleColumn" filterBy="#{survey.title}" headerText="Bezeichnung" filterMatchMode="contains">  
                                <h:outputText value="#{survey.title}" />  
                            </p:column>
                            <p:column id="activeColumn" headerText="Aktiv" filterBy="#{survey.active}" filterOptions="#{surveyBean.surveyOptions}"  
                                      filterMatchMode="exact">   
                                <h:outputText value="#{survey.active}" />  
                            </p:column>
                            <p:column id="toggleColumn">  
                                <p:rowToggler />  
                            </p:column> 
                            <p:rowExpansion>  
                                <h:panelGrid id="display" columns="2" cellpadding="4" style="width:300px;"  
                                                styleClass=" ui-widget-content grid">  

                                    <f:facet name="header">  
                                        Details der Umfrage 
                                    </f:facet>  

                                    <h:outputText value="Bezeichnung:" />  
                                    <h:outputText id="model" value="#{survey.title}" />  

                                    <h:outputText value="Status:" />  
                                    <h:outputText id="year" value="#{survey.active}" />  

                                    <h:outputText value="ID:" />  
                                    <h:outputText value="#{survey.id}"/>   
                                </h:panelGrid>  

                            </p:rowExpansion> 
                        </p:dataTable>

Upvotes: 0

Darka
Darka

Reputation: 2768

I am new here too, but this example worked for me. I see some problems in your example.

First if you put var="user" then rowKey="#{userMB.id}" must be rowKey="#{user.id}" Same here:

As you see I removed filterValue="#{usuario.login}" as I don't used this.

In the end this should look like this:

  <p:dataTable id="users" 
  var="user" 
  value="#{userMB.users}" 
  rowKey="#{user.id}"
  selection="#{userMB.userSelected}" 
  selectionMode="single"
  rows="10"
  paginator="true"
  filteredValue="#{userMB.filteredUser}"
  paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"

  >

      <p:column headerText="Id" >
      #{user.id}
      </p:column>

      <p:column headerText="Login" sortBy="#{user.login}" filterBy="#{user.login}">
      #{user.login}
      </p:column>

  </p:dataTable>

Maybe its not problem, but I used @ViewScoped.

Hint: you can be interested in filterMatchMode="contains"

I hope I helped you.

Upvotes: 1

Related Questions