私はicefaces 3.2を使用しています。フィルター ボックスに入力された値の範囲に基づいて、ace:datatable フィルターのフィルター ボックスを作成する方法を知りたいです。たとえば、二重の値を持つデータテーブルの価格列の場合、フィルター ボックスに ">1000" のような範囲を入力すると、フィルターはそれをフィルター処理する必要があります。
1 に答える
わかりました、あなたの件名とあなたの質問はまったく異なっています。ただし、「日付ベースの式」をフィルタリングする限り、Icefaces は文字列形式以外のフィルタリング サポートを提供していません。そこで、これを実現するために私が行った回避策を次に示します。
あなたの .xhtml マークアップで:
constantRefilter= "true"
対応する ace データ テーブルの属性を追加します。日付列の場合:
<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>
したがって、これを行うと、対応する 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 ではそれができません。