0

我正在使用icefaces 3.2。我想知道如何根据在过滤框中输入的值范围来制作 ace:datatable 过滤器的过滤器。例如,对于具有双值的数据表的价格列,我想在过滤器框中输入一个范围,例如“>1000”,过滤器应该过滤它。

4

1 回答 1

2

好的,我看到您的主题和您的问题完全不同。但就过滤“基于日期的表达式”而言,Icefaces 不提供除字符串格式之外的过滤支持。所以,这是我为完成这项工作所做的一种解决方法。

在你的 .xhtml 标记中:

  1. 为对应的ace数据表添加属性constantRefilter= "true"
  2. 对于日期列:

    <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>
    
  3. 所以,在你这样做之后,你应该有相应的 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 回答