【问题标题】:PrimeFaces DataTable Enum filteringPrimeFaces DataTable 枚举过滤
【发布时间】:2012-09-22 01:15:12
【问题描述】:

我正在使用 PF 3.4 并尝试过滤具有枚举值的列。我正在使用 jsf 2.0 的枚举转换器。但是过滤对我不起作用这里是示例代码:

<p:dataTable id="projeTeklifiListesiDataTable"
                value="#{controller.model.projeTeklifiListesi}"
                var="proje" paginator="true" rowKey="#{proje.id}"
                rows="50"
                selection="#{controller.model.secilenProjeTeklifi}"
                selectionMode="single" styleClass="defaultList">


                <p:column headerText="#{etiket['pfdy_hzrl_vt013']}" 
                              filterBy="#{projeTeklifi.projeTeklifiDurumu}"
                              filterOptions="#{controller.model.projeTeklifiDurumuListesi}" 
                    sortBy="#{projeTeklifi.projeTeklifiDurumu.toString()}">  
                       #{proje.projeTeklifiDurumu.toString()}  
                </p:column>
                <p:column headerText="#{etiket['pfdy_dkd_vt010']}" filterBy="#{projeTeklifi.basariDurumu}"
                    filterOptions="#{controller.model.basariDurumuListesi}"
                    sortBy="#{projeTeklifi.basariDurumu.toString()}">  
                       #{proje.basariDurumu.toString()}  
                </p:column>
            </p:dataTable>

这是过滤器选项的列表

public SelectItem[] getProjeTeklifiDurumuListesi()
{
    final ProjeTeklifiDurumu[] durumListesi = ProjeTeklifiDurumu.values();
    final SelectItem[] projeTeklifiDurumListesi = new SelectItem[durumListesi.length+1];
    projeTeklifiDurumListesi[0] = new SelectItem("", "Seçiniz");
    for(int i =0;i<durumListesi.length;i++)
    {
        final SelectItem select = new SelectItem(ProjeTeklifiDurumu.valueOf(durumListesi[i].name()),durumListesi[i].toString());
        projeTeklifiDurumListesi[i+1]=select;
    }
    return projeTeklifiDurumListesi;
}

public SelectItem[]  getBasariDurumuListesi()
{
    final BasariDurumu[] durumListesi = BasariDurumu.values();
    final SelectItem[] projeTeklifiDurumListesi = new SelectItem[durumListesi.length+1];
    projeTeklifiDurumListesi[0] = new SelectItem("", "Seçiniz");
    for(int i =0;i<durumListesi.length;i++)
    {
        final SelectItem select = new SelectItem(durumListesi[i],durumListesi[i].toString());
        projeTeklifiDurumListesi[i+1]=select;
    }
    return projeTeklifiDurumListesi;
}

我已经尝试使用 SelectedItem 类的不同值绑定来绑定枚举本身,绑定枚举的名称,调用 toString() 方法但它不过滤。我可以看到我的过滤器选项的值绑定已正确发布,但没有过滤数据。

任何线索都会有所帮助。

谢谢。

【问题讨论】:

    标签: jsf-2 enums datatable primefaces filtering


    【解决方案1】:

    看看 org.primefaces.component.datatable.DataHelper

    void decodeFilters(FacesContext context, DataTable table) {
      ...
    
      String columnValue = String.valueOf(column.getValueExpression("filterBy").getValue(context.getELContext()));
      ...
    }
    

    他们按原样解码值,所以我认为不会使用转换器。

    【讨论】:

    • 感谢您的回答,我调试了它并在 xhtml 中看到了问题,值字段的开头有一个空格,因此它永远不会匹配过滤器。
    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 2011-10-18
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多