Создайте свой код таким образом
xhtml
<p:column headerText="Order number" sortBy="#{productionOrder.orderNumber}"
filterFunction="#{productionOrdersView.filter()}"
filterMatchMode="contains">
<f:facet name="filter">
<h:inputHidden id="filter"/>
</f:facet>
<f:facet name="header">
<p:inputText id="from" value="#{productionOrdersView.from}">
<p:ajax event="keyup" />
</p:inputText>
<h:outputText class="fa fa-arrows-h fa-2x" style="vertical-align: middle;"/>
<p:inputText id="to" value="#{productionOrdersView.to}">
<p:ajax event="change"
listener="#{productionOrdersView.filter()}" update="your_dataTable_Id"
oncomplete="PF('your_dataTable_widgetVar').filter()"/>
</p:inputText>
</f:facet>
<h:outputText value="#{productionOrdersView.orderNumber}" />
</p:column>
В компоненте создайте 2 целочисленные переменные from
to
с помощью методов получения и установки и используйте метод o для фильтрации ваших данных.
private Integer from;
private Integer to;
..............
//Method that filter the data
public void filter(){
//Filter your data between from - to
.......................
}
}
Вы можете улучшить этот код, но я думаю, что это хорошая база.
ОБНОВЛЕНИЕ ОТВЕТА
Проблема с вашим кодом заключается в том, что вы непоместите отфильтрованный список в качестве значения в таблицу данных. Для работы этого кода вы можете сделать 2 вещи. ( Выполните одно из них )
1) Измените отфильтрованную функцию, как показано ниже.
public void filter() {
System.out.println("Filtering...");
System.out.println(orderNumberStartFilter+" "+orderNumberEndFilter);
if(orderNumberStartFilter!=null && orderNumberEndFilter!=null) {
this.filtered = productionOrderController.findFromToOrderNumber(Integer.valueOf(orderNumberStartFilter), Integer.valueOf(orderNumberEndFilter));
}else {
if(orderNumberStartFilter!=null) {
orders = productionOrderController.findFromToOrderNumber(Integer.valueOf(orderNumberStartFilter), Integer.valueOf(orderNumberStartFilter));
return;
}
if(orderNumberEndFilter!=null) {
orders = productionOrderController.findFromToOrderNumber(Integer.valueOf(orderNumberEndFilter), Integer.valueOf(orderNumberEndFilter));
return;
}
}
System.out.println(orders.size());
}
2) Измените переменную в коде значения с датой.
<p:dataTable id="dtOrders" var="productionOrder"
value="#{productionOrdersView.filtered}" selectionMode="single"
reflow="true" selection="#{productionOrdersView.selected}"
widgetVar="ordersTable" rowKey="#{productionOrder.pk}"
paginator="true" rows="20">
.................