【问题标题】:Primefaces Datatable Date column filteringPrimefaces 数据表日期列过滤
【发布时间】:2015-05-27 07:41:05
【问题描述】:

如何以 dd//mm/yyyy 模式过滤数据表中的日期列? 我正在使用 Primefaces 5.2 社区版。

<p:column sortBy="#{user.date}" styleClass="date"
    filterBy="#{user.date}" id="date">

        <h:outputText value="#{user.date}">
            <f:convertDateTime type="date" pattern="dd/MM/yyyy" />
        </h:outputText>
        <p:watermark for="@(.date)" value="#{msg['dateOfBirth']}" />

</p:column>

没有转换器的过滤有效,但使用转换器不再起作用

【问题讨论】:

  • 从 PrimeFaces 5.0 开始,任何输入组件都可以放在&lt;f:facet name="filter"&gt; 中,&lt;f:facet name="filter"&gt; 充当列过滤器。按日期过滤结果列表与使用其他类型的值过滤结果列表不再不同。
  • 是的,过滤没有问题,但真正的问题是如何以dd/mm/yyyy模式过滤

标签: jsf jsf-2 primefaces


【解决方案1】:

这对我来说很好用。

<p:column headerText="Data " filterBy="#{user.date}">
    <h:outputText value="#{user.date}" />

但我可能没有明白你真正的问题是什么。

编辑。

我复制粘贴你的代码,它对我来说很好......

<p:column sortBy="#{odczyt.data_odczytu}" 
filterBy="#{odczyt.data_odczytu}" id="date">
    <h:outputText value="#{odczyt.data_odczytu}">
        <f:convertDateTime type="date" pattern="dd/MM/yyyy" />
    </h:outputText>
    <p:watermark for="@(.date)" value="#{msg['dateOfBirth']}" />

您必须记住,过滤器不会看到转换格式的日期,而是来自支持 bean 的原始格式。 所以当你有一个'yyyy-MM-dd'格式的日期并使用转换器'pattern =“dd/MM/yyyy”'时,在过滤器字段中你必须使用与原始bean格式相同的模式,例如'2015-05- 03'。

【讨论】:

  • 为什么投反对票?正如我所说,我没有问题过滤日期。你的“约会”是什么类型的?我使用时间戳
  • 只要有为 convertDateTime 设置的时区,看起来就可以。 &lt;p:column headerText="Data zuzycia" filterBy="#{odczyt.data_zuzycia}"&gt; &lt;h:outputText value="#{odczyt.data_zuzycia}" &gt; &lt;f:convertDateTime type="date" pattern="yyyy-MM-dd HH:mm" /&gt; &lt;/h:outputText&gt; &lt;/p:column&gt; 和 web.xml 中的 &lt;context-param&gt; &lt;param-name&gt;javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE&lt;/param-name&gt; &lt;param-value&gt;true&lt;/param-value&gt; &lt;/context-param&gt;
【解决方案2】:

不要在视图中格式化日期,而是将其转换为支持 bean 的字符串。

查看

 <p:column sortBy="#{user.dateAsString}" styleClass="date" 
      filterBy="#{user.dateAsString}" id="date">
    <h:outputText value="#{user.dateAsString}">
 </p:column>

支持豆

public String getDateAsString() {
    Format formatter = new SimpleDateFormat("dd/mm/yyyy");
    return formatter.format(date);
}

【讨论】:

  • 糟糕的选择,PrimeFaces 有足够多的选项来真正过滤日期
  • @Kukeltje 为什么不告诉我们你的答案呢?我的解决方案比尝试在视图中的实际日期使用 PF 过滤器更容易。
  • 使用过滤器构面。输入可以日历组件。无需将视图责任(格式)添加到您的 bean。无需为我发布答案,因为这是在 PrimeFaces 展示中
  • @Kukeltje 指向您所指的展示示例的链接将是有益的。我没有在日期上看到一个过滤器。他们的自定义过滤功能示例是价格 primefaces.org/showcase/ui/data/datatable/filter.xhtml 。我在其他数据上使用了自定义过滤器功能,但只是发现我上面的解决方案对于日期来说很容易实现。此外,通过使用字符串表示,最终用户可以键入部分日期,例如“11/”,并仅显示 11 月日期或“/27”的项目,并显示第 27 天到期的项目。
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 2018-01-29
  • 2013-12-04
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2014-01-04
相关资源
最近更新 更多