1

PF 3.4 を使用して、列挙値を持つ列をフィルター処理しようとしています。私はjsf 2.0のenumコンバーターを使用しています。しかし、フィルタリングは私には機能しません。ここにサンプルコードがあります:

<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() メソッドと呼ばれる列挙型の名前をバインドしますが、フィルタリングしません。フィルター オプションの値バインディングが正しく送信されていることがわかりますが、データがフィルター処理されていません。

どんな手がかりも役に立ちます。

ありがとうございました。

4

1 に答える 1

2

org.primefaces.component.datatable.DataHelperを見てください

void decodeFilters(FacesContext context, DataTable table) {
  ...

  String columnValue = String.valueOf(column.getValueExpression("filterBy").getValue(context.getELContext()));
  ...
}

値をそのままデコードしているので、コンバーターは使わないと思います。

于 2012-10-02T08:30:07.617 に答える