Primefaces dataTable过滤日期

时间:2013-11-20 14:13:09

标签: date jsf-2 primefaces filter datatable

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

<p:column id="date" headerText="Manufacturing date" 
    filterBy="#{car.dateOfManufacturing}" 
    filterMatchMode="contains">
    <p:outputLabel value="#{car.dateOfManufacturing}"  >
    </p:outputLabel>
</p:column>

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

<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>

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

2013年11月20日

但即使我输入Wed Nov ..我也能看到过滤后的结果。 我还观察到,如果没有语言环境,日期就会显示为

2013年11月20日星期三13:43:37 CET 2013  所以我猜它是按照后一个日期过滤的,即使我们在屏幕上看到不同的日期模式。

1 个答案:

答案 0 :(得分:4)

我认为需要在添加到过滤器(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;

和我的XHTML:

<p:column id="date" headerText="Simple date"
                    filterBy="#{entry.dateString}"
                    filterMatchMode="contains">
         <p:outputLabel value="#{entry.dateString}"  >
         </p:outputLabel>
</p:column>

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

<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>

我的表:

enter image description here

在语言环境日期列中,过滤可以正常使用这三个日期。也许,如果我开始使用许多日期测试此问题,结果将与您的答案中描述的结果相同。

所以,我提供隐藏日期到字符串或use calendar