Jsf 如何按整数范围筛选数据表?
我在JSF页面中有一个dataTable,其中列出了我的所有对象。通常我使用filterBy和filterMatchMode来执行这种类型的操作,但在这种情况下,我必须为给定的列筛选列表,以获得一个值范围。我怎样才能做到这一点Jsf 如何按整数范围筛选数据表?,jsf,primefaces,Jsf,Primefaces,我在JSF页面中有一个dataTable,其中列出了我的所有对象。通常我使用filterBy和filterMatchMode来执行这种类型的操作,但在这种情况下,我必须为给定的列筛选列表,以获得一个值范围。我怎样才能做到这一点 <p:dataTable id="dtOrders" var="productionOrder" value="#{productionOrdersView.orders}" selectionMode="single
<p:dataTable id="dtOrders" var="productionOrder"
value="#{productionOrdersView.orders}" selectionMode="single"
reflow="true" selection="#{productionOrdersView.selected}"
filteredValue="#{productionOrdersView.filtered}"
widgetVar="ordersTable" rowKey="#{productionOrder.pk}"
paginator="true" rows="20">
<f:facet name="header">
Bolle di lavorazione
</f:facet>
<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>
如何筛选列表?这是执行此操作的好方法吗?我还希望,如果只插入一个值,则过滤器操作将被设置为相等(顺序精确)。我在网上搜索过很多关于日期的例子,但是没有看到整数值的例子
更新
list.xhtml:72 Uncaught TypeError: Cannot read property 'filter' of undefined
at Object.onco (list.xhtml:72)
at Object.<anonymous> (core.js.xhtml?ln=primefaces&v=7.0:3)
at u (jquery.js.xhtml?ln=primefaces&v=7.0:2)
at Object.fireWith [as resolveWith] (jquery.js.xhtml?ln=primefaces&v=7.0:2)
at k (jquery.js.xhtml?ln=primefaces&v=7.0:2)
at XMLHttpRequest.<anonymous> (jquery.js.xhtml?ln=primefaces&v=7.0:2)
onco @ list.xhtml:72
(anonymous) @ core.js.xhtml?ln=primefaces&v=7.0:3
u @ jquery.js.xhtml?ln=primefaces&v=7.0:2
fireWith @ jquery.js.xhtml?ln=primefaces&v=7.0:2
k @ jquery.js.xhtml?ln=primefaces&v=7.0:2
(anonymous) @ jquery.js.xhtml?ln=primefaces&v=7.0:2
list.xhtml:72未捕获类型错误:无法读取未定义的属性“filter”
在Object.onco(list.xhtml:72)
反对。(core.js.xhtml?ln=primefaces&v=7.0:3)
在u处(jquery.js.xhtml?ln=primefaces&v=7.0:2)
在Object.fireWith[as resolveWith](jquery.js.xhtml?ln=primefaces&v=7.0:2)
在k处(jquery.js.xhtml?ln=primefaces&v=7.0:2)
在XMLHttpRequest。(jquery.js.xhtml?ln=primefaces&v=7.0:2)
onco@list.xhtml:72
(匿名)@core.js.xhtml?ln=primefaces&v=7.0:3
u@jquery.js.xhtml?ln=primefaces&v=7.0:2
fireWith@jquery.js.xhtml?ln=primefaces&v=7.0:2
k@jquery.js.xhtml?ln=primefaces&v=7.0:2
(匿名)@jquery.js.xhtml?ln=primefaces&v=7.0:2
让你的代码像这样
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>
您可以改进此代码,但我认为这是一个很好的基础
更新答案 代码的问题在于没有将筛选列表作为值放入数据表中。 要使用此代码,您可以做两件事。(做其中一个)
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) 更改datatable值代码中的变量
<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">
.................
.................
您可以这样做,并制作自己的过滤器。查看价格中的过滤器谢谢,但只有一个值!在我的例子中,我需要一个范围,因此在@tsotzolasOk中有两个值(max和min)我发现了javascript错误。将PF('dtOrders').filter()更改为PF('ordersTable').filter()
。我也会改变我的答案。您必须将widgetVar值放在那里,因为widgetVar值也会进行此更改,但值不会更新,而系统输出仅为2个值。这些值不会更新,因为您将datable值放在了列表中,而不是过滤后的值。在p:datatable
中,字段filteredValue
是从表中获取过滤后的值,而不是将过滤后的值放入方法中。谢谢,但是我发现更新方法有一些问题;我错在哪里?我已经更新了我的问题。filter方法运行良好?是否使用输入数字过滤日期?如果您更新整个表单,并且不仅dtOrders
工作正常?filter()方法工作正常,因为控制台输出为2(这是正确的,因为我输入了两个连续的数字,但表中显示的是整个项目,而不仅仅是2个项目。datatable的值必须是过滤的值。因此,最好在过滤器中放置顺序,而不是过滤的,过滤的值是一个可以使用va的列表正如您在filter()方法中看到的那样,filterYes后面的lues是筛选列表
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());
<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">
.................