【发布时间】:2013-01-20 18:32:08
【问题描述】:
我正在使用 icefaces 3.2。我想知道如何根据在过滤框中输入的值范围来制作 ace:datatable 过滤器的过滤器。例如,对于具有双值的数据表的价格列,我想在过滤器框中输入一个范围,例如“>1000”,过滤器应该过滤它。
【问题讨论】:
标签: jsf-2 icefaces-3
我正在使用 icefaces 3.2。我想知道如何根据在过滤框中输入的值范围来制作 ace:datatable 过滤器的过滤器。例如,对于具有双值的数据表的价格列,我想在过滤器框中输入一个范围,例如“>1000”,过滤器应该过滤它。
【问题讨论】:
标签: jsf-2 icefaces-3
好的,我看到您的主题和您的问题完全不同。但就过滤一个 “基于日期的表达式”,Icefaces 不提供除字符串格式以外的过滤支持。因此,这是我为完成此任务而采取的一种解决方法。
在你的 .xhtml 标记中:
constantRefilter= "true"。对于日期列:
<ace:column id="scanDateColumn" filterBy="#{row.scanDate}"
filterValue="#{mainReport.scanDateFilter}" filterMatchMode="exact">
<f:facet name="header">
Scan Date
<ace:dateTimeEntry id="scanDate" timeZone="#{mainReport.timeZone}"
value="#{mainReport.scanCalenderDate}" pattern="MM/dd/yyyy" renderAsPopup="true>
<ace:ajax event="dateSelect" listener="#{mainReport.dateSelected}"/>
</ace:dateTimeEntry>
</f:facet>
<h:outputText value="#{row.scanDate}" />
</ace:column>
所以,在你这样做之后,你应该有相应的 bean 值,以及相应的 getter 和 setter。现在在 Bean 中:你的监听器看起来像这样:
public void dateSelected(DateSelectEvent e) throws ParseException {
setScanDateFilter(dateFormatForFilter(e.getDate()));
}
好的,这里dateFormatForFilter(Date d) 是一种将日期转换为自定义格式的字符串的方法。原因是,您在列上看到的 filterValue 只接受字符串格式,而 ace 数据条目的值是日期格式。所以基本上,在该日期框中选择的任何内容都将设置为 filterValue ,因此它将被选定的值过滤。
如果您不希望自动显示过滤框,请在 dataEntry 框下方,为上列添加一个属性为:filterStyle="display:none",这将处理它。所以现在你可以看到这样的东西:
我本可以附上生成的屏幕截图,但 stackoverflow 不允许我这样做。所以,让我知道这是否有意义。
【讨论】: