使用列上的rich:calendar过滤rich:dataTable

时间:2011-10-06 10:11:25

标签: jsf-2 richfaces

我正在使用richfaces 4.0,我在rich:dataTable上添加了一些列过滤器。现在,因为我正在过滤包含日期的列,所以我想使用rich:calendar来过滤表的内容。因此,按照我发现的示例,我将以下代码添加到.xhtml页面:

<rich:column filter="#{rerunFilter.aodFilterImpl}">
    <f:facet name="header">
        <h:outputText value="Aod Rerun" />
        <br/>
        <rich:calendar id="aod"
                   datePattern="yyyy-MM-dd"
                   showWeekDaysBar="false"
                   showFooter="false"
                   value="#{rerunFilter.aodFilter}"
                   popup="true">
            <a4j:ajax event="change" render="main:rerunListTable" execute="@this"/>
        </rich:calendar>
    </f:facet>
    <h:outputText value="#{item.aod}">
        <f:convertDateTime pattern="yyyy-MM-dd" />
    </h:outputText>
</rich:column>

在服务器端,我有过滤器类,我在其中添加了以下代码:

private String aodFilter;

public String getAodFilter() {
    return aodFilter;
}

public void setAodFilter(String aodFilter) {
    logger.info("Received "+aodFilter);
    this.aodFilter = aodFilter;
}

public Filter<?> getAodFilterImpl() {
    return new Filter<Rerun>() {
        public boolean accept(Rerun item) {
            String aod = getAodFilter();
            logger.info("Invoked with "+aod+" Item date "+item.getAod());
            return true;

        }
    };
}

当我更改日期时,使用日历,我在日志中看到属性是正确的,但有一些错误,因为我在最后得到了一个例外

11:50:54,484 GRAVE [org.richfaces.log.Context](http - 127.0.0.1-8080-1)main:rerunListTable:j_idt38:'Wed Oct 12 00:00:00 CEST 2011'不能被理解为日期:javax.faces.convert.ConverterException:main:rerunListTable:j_idt38:'Wed Oct 12 00:00:00 CEST 2011'不能被理解为日期。

我哪里错了? 谢谢 FIL

1 个答案:

答案 0 :(得分:1)

我发现了这个问题!我使用了错误的类型作为aodFilter属性,它是一个java.util.Date,之前我使用过一个String。 使用正确的类型并添加过滤器逻辑,一切正常。 请注意,我要解决另一个小问题,因为我不认识JSF在不使用我自己的时区的情况下转换日期。 顺便说一句,我添加了这些行

<context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
</context-param>
按照f:convertDateTime displays wrong Date的建议

到web.xml,一切正常 感谢