0

私はicefaces 3.2を使用しています。フィルター ボックスに入力された値の範囲に基づいて、ace:datatable フィルターのフィルター ボックスを作成する方法を知りたいです。たとえば、二重の値を持つデータテーブルの価格列の場合、フィルター ボックスに ">1000" のような範囲を入力すると、フィルターはそれをフィルター処理する必要があります。

4

1 に答える 1

2

わかりました、あなたの件名とあなたの質問はまったく異なっています。ただし、「日付ベースの式」をフィルタリングする限り、Icefaces は文字列形式以外のフィルタリング サポートを提供していません。そこで、これを実現するために私が行った回避策を次に示します。

あなたの .xhtml マークアップで:

  1. constantRefilter= "true"対応する ace データ テーブルの属性を追加します。
  2. 日付列の場合:

    <ace:column id="scanDateColumn" filterBy="#{row.scanDate}"
    filterValue="#{mainReport.scanDateFilter}" filterMatchMode="exact">
    <f:facet name="header">
    Scan Date
    <ace:dateTimeEntry id="scanDate" timeZone="#{mainReport.timeZone}"
    value="#{mainReport.scanCalenderDate}" pattern="MM/dd/yyyy" renderAsPopup="true>
    <ace:ajax event="dateSelect" listener="#{mainReport.dateSelected}"/>
    </ace:dateTimeEntry>
    </f:facet>
    <h:outputText value="#{row.scanDate}" />
    </ace:column>
    
  3. したがって、これを行うと、対応する Bean 値と、対応するゲッターとセッターが必要になります。Bean で: リスナーは次のようになります。

    public void dateSelected(DateSelectEvent e) throws ParseException {
    
           setScanDateFilter(dateFormatForFilter(e.getDate()));
    }
    

わかりました、ここでdateFormatForFilter(Date d)、 は Date をカスタマイズされた形式の String に変換するメソッドです。その理由は、列に表示される filterValue は文字列形式のみを受け入れ、ace データ エントリの値は日付形式です。したがって、基本的に、その日付ボックスで選択されたものは何でも filterValue に設定されるため、選択された値によってフィルター処理されます。

自動的に表示されるフィルター ボックスが必要ない場合は、dataEntry ボックスの下に、上記の列の属性を次のように追加しますfilterStyle="display:none"。したがって、次のようなものが表示されます。

結果のスクリーンショットを添付することもできましたが、stackoverflow ではそれができません。

于 2013-01-31T22:30:42.307 に答える