Primefaces DataTable过滤日期

use*_*111 5 datatable date filter primefaces jsf-2

我遇到一个特定的问题。我有一个数据表,我想在其中过滤素数中的日期。当我使用

<p:column id="date" headerText="Manufacturing date" 
    filterBy="#{car.dateOfManufacturing}" 
    filterMatchMode="contains">
    <p:outputLabel value="#{car.dateOfManufacturing}"  >
    </p:outputLabel>
</p:column>
Run Code Online (Sandbox Code Playgroud)

然后,日期过滤就很好了。但是当我使用

<p:column id="date" headerText="Manufacturing date" 
    filterBy="#{car.dateOfManufacturing}" 
    filterMatchMode="contains">
    <p:outputLabel value="#{car.dateOfManufacturing}"  >
        <f:convertDateTime locale="de"  />
    </p:outputLabel>
</p:column>
Run Code Online (Sandbox Code Playgroud)

过滤不正确。实际上,我的观察是在语言环境中,日期格式类似于

2013年11月20日

但是即使我输入Wed Nov ..,我仍然可以看到过滤结果。我还观察到,在没有语言环境的情况下,日期将作为

WET Nov 20 13:43:37 CET 2013因此,即使我们在屏幕上看到一个不同的日期模式,我也想根据后一个日期对其进行过滤。

her*_*rry 5

我认为在添加到过滤器()之前需要转换您的日期filterBy="#{car.dateOfManufacturing}"。一种简单的解决方案是将日期转换为 bean 中具有简单日期格式的字符串。

这是我的代码:

我的RowData包含:String entry1, String entry2, String dateString, Date date.

我的填充数据的bean方法:

public List<RowData> getTestData() {
  DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
(...)
  entries.add(new RowData("a1", "b1", dateFormat.format(new Date()), currentDate()));
(...)
return entries;
Run Code Online (Sandbox Code Playgroud)

和我的 XHTML:

<p:column id="date" headerText="Simple date"
                    filterBy="#{entry.dateString}"
                    filterMatchMode="contains">
         <p:outputLabel value="#{entry.dateString}"  >
         </p:outputLabel>
</p:column>
Run Code Online (Sandbox Code Playgroud)

现在我将您的代码添加到我的表中:

<p:column id="dateLocale" headerText="Locale date"
                          filterBy="#{entry.date}"
                          filterMatchMode="contains">
         <p:outputLabel value="#{entry.date}"  >
            <f:convertDateTime locale="de"  />
         </p:outputLabel>
</p:column>
Run Code Online (Sandbox Code Playgroud)

我的桌子:

在此输入图像描述

过滤可以很好地处理区域设置日期列中的这三个日期。也许,如果我开始用多个日期测试这个问题,结果将与您的答案中描述的相同。

因此,我提供隐藏日期字符串或使用 calendar