Datatable Global Filter + selectBooleanCheckbox Filter

UI Components for JSF
Post Reply
jaider
Posts: 8
Joined: 20 Sep 2017, 18:29

20 Sep 2017, 19:16

Hi,

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>
 
ManagedBean

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...
Any help will be appreciated.

Thanks!

kukeltje
Expert Member
Posts: 9605
Joined: 17 Jun 2010, 13:34
Location: Netherlands

21 Sep 2017, 09:11

Try a LazyDataModel. There you have full control over filtering. I personally always use it, even for simple cases.

jaider
Posts: 8
Joined: 20 Sep 2017, 18:29

21 Sep 2017, 15:17

kukeltje wrote:
21 Sep 2017, 09:11
Try a LazyDataModel. There you have full control over filtering. I personally always use it, even for simple cases.
I'll take a look at this. Thanks!

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 26 guests