2013-11-20 62 views
4

我遇到了一个特殊的问题。我有一个数据表,我希望在primefaces中过滤日期。当我使用Primefaces dataTable使用日期筛选

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

,但即使我键入周三十一月..我能看到过滤后的结果。 我还观察到,如果没有语言环境

周三11月20日13:43:37 CET 2013 所以我想这是越来越根据后者日期过滤,即使我们在屏幕上看到不同的日期模式日期dispayed。

+0

car.dateOfManufacturing字段的类型是什么?简单约会?如果是这种日期格式的单向格式... – herry

+0

我目前正在使用java.util.Date – user19999111

回答

4

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

这里是我的代码:

RowData containts: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