UI にデータを表示するために、primefaces datatable を使用しています。ご存知のように、データ テーブル自体で並べ替えとフィルター処理を行うことができます。しかし、データテーブルの並べ替えフィールドに単一の文字を入力すると、データの検索が開始されます。ユーザーがフィールドに少なくとも 3 文字を入力した場合にのみ、データを検索する必要があります。それは可能ですか..?もしそうなら、どのように?それについてあなたのコメントを提供してください。
前もって感謝します。
UI にデータを表示するために、primefaces datatable を使用しています。ご存知のように、データ テーブル自体で並べ替えとフィルター処理を行うことができます。しかし、データテーブルの並べ替えフィールドに単一の文字を入力すると、データの検索が開始されます。ユーザーがフィールドに少なくとも 3 文字を入力した場合にのみ、データを検索する必要があります。それは可能ですか..?もしそうなら、どのように?それについてあなたのコメントを提供してください。
前もって感謝します。
私は Primefaces のデータ テーブルを少し調査しましたが、これが私の調査結果です。
実際には、再コンパイルは必要ありません。ソースの JavaScript の置換も同様です。
Primefaces が提供するものではなく、フィルター イベントの新しいハンドラーを登録する必要があります。
この場合、データ テーブルは次のように使用されます。
<h:outputScript name="js/customprimefacestable.js" target="body"/>
<p:dataTable var="data" value="#{filterBean.data}" filteredValue="#{filterBean.filteredData}" widgetVar="tableWidget">
<p:column filterBy="#{data.name}" headerText="Name" filterMatchMode="contains">
<h:outputText value="#{data.name}" />
</p:column>
<p:column filterBy="#{data.value}" headerText="Value" filterMatchMode="contains">
<h:outputText value="#{data.value}" />
</p:column>
...
</p:dataTable>
そしてJavaScriptは次のようになります:
$(document).ready(function() {
tableWidget.thead.find('> tr > th.ui-filter-column > .ui-column-filter').each(function() {
var filter = $(this);
if(filter.is('input:text')) {
if(tableWidget.cfg.filterEvent!="enter"){
//unbind current handler
filter.unbind(tableWidget.cfg.filterEvent);
//bind new handler that accounts for conditional filtering
filter.bind(tableWidget.cfg.filterEvent, function(c) {
if(filter.val().length > 3) {
//Primefaces 3.5 implementation
if(tableWidget.filterTimeout){
clearTimeout(tableWidget.filterTimeout);
}
tableWidget.filterTimeout=setTimeout(function(){
tableWidget.filter();
tableWidget.filterTimeout=null},
tableWidget.cfg.filterDelay);
}
});
}
}
});
});
注意事項:
target="body"
: <head>
Primefaces は でそのウィジェット変数を初期化するため、javascript を で実行してはなりません。そのため、Primefaces の初期化が行われた後$(document).ready()
に関数が実行されることは保証されません。<p:dataTable>
ます。Primefaces の実装はバージョンごとに異なるため、使用しているバージョンの実装を確認するか、バージョン 3.5 にアップグレードしてください。keyup
テーブルはデフォルト ( ) イベントをリッスンします。