【问题标题】:icefaces ace datatable: filter box : how to make filtering of date based expressionicefaces ace 数据表:过滤框:如何过滤基于日期的表达式
【发布时间】:2013-01-20 18:32:08
【问题描述】:

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

【问题讨论】:

    标签: jsf-2 icefaces-3


    【解决方案1】:

    好的,我看到您的主题和您的问题完全不同。但就过滤一个 “基于日期的表达式”,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 不允许我这样做。所以,让我知道这是否有意义。

    【讨论】:

    • 非常感谢,这个例子我明白了。实际上,我正在寻找一种在过滤器框中传递日期表达式的方法,例如“> 01/01/2013”​​,这意味着向我展示所有大于 01/jan/2013 的结果,Icefaces 论坛告诉我,他们下一个版本的 Icefaces 3.3 将有这个功能。所以目前我正在用选定的日期表达式刷新我的模式。
    猜你喜欢
    • 2014-04-12
    • 2013-09-06
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多