我在JSF页面中有一个dataTable,其中列出了所有对象。通常,我使用filterBy和filterMatchMode来执行这种类型的操作,但是在这种情况下,我必须过滤给定列的列表,以获得值的范围。我该如何实现?
<p:column headerText="Numero bolla"
sortBy="#{productionOrder.orderNumber}"
filterFunction="#{productionOrdersView.filter()}"
filterOptions="contains">
<f:facet name="filter">
<h:inputHidden id="filter" />
</f:facet>
<f:facet name="header">
<h:outputText value="Numero bolla" />
<h:outputText value="Dalla" />
<p:inputText id="from"
value="#{productionOrdersView.orderNumberStartFilter}">
<p:ajax event="keyup" />
</p:inputText>
<h:outputText value="alla" />
<p:inputText id="to"
value="#{productionOrdersView.orderNumberEndFilter}">
<p:ajax event="change"
listener="#{productionOrdersView.filter()}" update="dtOrders"
oncomplete="PF('dtOrders').filter()" />
</p:inputText>
</f:facet>
<h:outputText value="#{productionOrder.orderNumber}" />
</p:column>
和bean方法:
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) {
this.filtered = productionOrderController.findFromToOrderNumber(Integer.valueOf(orderNumberStartFilter), Integer.valueOf(orderNumberStartFilter));
return;
}
if(orderNumberEndFilter!=null) {
this.filtered = productionOrderController.findFromToOrderNumber(Integer.valueOf(orderNumberEndFilter), Integer.valueOf(orderNumberEndFilter));
return;
}
this.filtered = orders;
}
System.out.println(filtered.size());
}
如何过滤列表?这是执行此操作的好方法吗?我也希望,如果仅插入一个值,则过滤器操作将等于(如此精确地排序)。我已经在网上搜索过,并且看到了很多有关日期的示例,但没有看到整数值的示例。
使您的代码如此
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_Id').filter()"/>
</p:inputText>
</f:facet>
<h:outputText value="#{productionOrdersView.orderNumber}" />
</p:column>
在bean中,使用getter和setter并使用make o方法过滤2个Integer变量from
to
来过滤数据
private Integer from;
private Integer to;
..............
//Method that filter the data
public void filter(){
//Filter your data between from - to
.......................
}
}
您可以改进此代码,但我认为这是一个很好的基础。