我正在使用icefaces 3.2。我想知道如何根据在过滤框中输入的值范围来制作 ace:datatable 过滤器的过滤器。例如,对于具有双值的数据表的价格列,我想在过滤器框中输入一个范围,例如“>1000”,过滤器应该过滤它。
问问题
2504 次
1 回答
2
好的,我看到您的主题和您的问题完全不同。但就过滤“基于日期的表达式”而言,Icefaces 不提供除字符串格式之外的过滤支持。所以,这是我为完成这项工作所做的一种解决方法。
在你的 .xhtml 标记中:
- 为对应的ace数据表添加属性
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 不允许我这样做。所以,让我知道这是否有意义。
于 2013-01-31T22:30:42.307 回答