I've created a datatable with global filter, for 3 descrition fields, at the table's header. Now I want to create another filter, based on status (true or false) of a hidden collumn. Is it possible? I've tried to manipulate "filteredValue" at backing bean, but with no success. Here is how my code looks like:
xhtml
Code: Select all
<p:dataTable value="#{view.itens}"
var="item" id="itemDataTable" widgetVar="itemDataTableVar"
filteredValue="#{view.filteredItens}">
<f:facet name="header">
<p:outputPanel>
<h:outputText value="Search:" style="font-size:14px;" />
<p:inputText id="globalFilter" onkeyup="PF('itemDataTableVar').filter()" />
</p:outputPanel>
<p:outputPanel>
<h:outputText value="Only true"/>
<p:selectBooleanCheckbox value="#{view.onlyTrue}">
<p:ajax listener="#{view.filterOnlyTrue()}"
update="itemDataTable"
oncomplete="PF('itemDataTableVar').filter()"
event="change" />
</p:selectBooleanCheckbox>
</p:outputPanel>
</f:facet>
<p:column headerText="Description 1" filterMatchMode="contains"
filterBy="#{item.description1}"
filterStyle="display:none">
<h:outputText value="#{item.description1}"/>
</p:column>
<p:column headerText="Description 2" filterMatchMode="contains"
filterBy="#{item.description2}"
filterStyle="display:none">
<h:outputText value="#{item.description2}"/>
</p:column>
<p:column headerText="Description 3" filterMatchMode="contains"
filterBy="#{item.description3}"
filterStyle="display:none">
<h:outputText value="#{item.description3}"/>
</p:column>
<p:column headerText="Status">
<h:outputText value="#{item.status}"/>
</p:column>
<p:column headerText="Some Flag" style="display: none;">
<h:outputText value="#{item.someFlag}"/>
</p:column>
</p:dataTable>
Code: Select all
private List<Item> itens;
private List<Item> filteredItens;
private boolean onlyTrue;
public void filterOnlyTrue() {
if (onlyTrue) {
for (Iterator<Item> i = filteredItens.iterator(); i.hasNext();) {
Item item = i.next();
if (item.someFlag()) {
i.remove();
}
}
}
}
// getters and setters...
Thanks!