PrimeFaces は、p:dataTable に対して非常によくできたフィルターを備えています。フィルター フィールドは列ヘッダーにあるので、UX サイトからは素晴らしいです。フィルター フィールドが何をフィルター処理しているかは疑いなく、ライブで機能しています。私の意見はユーザーが期待するものとまったく同じです)。
ここで、フィルターとして機能するカスタムをヘッダーに配置したいと思います。したがって、私の考えは、ヘッダー ファセットにコンポーネントを配置することでした。
<p:column ...>
<f:facet name="header">
<some:myComponent onkeydown="filterAction()"/>
</f:facet>
</p:column>
問題は、filterAction
dataTable コンポーネント全体を更新してはならず (ユーザーが入力しているコンポーネントが再作成されるため)、テーブル本体を更新する必要があることです。
私はPrimeFaces セレクター(jQuery セレクターに基づく) でそれを行うことができると思っていましたが、トピックによるとdataTable のセレクターのみを使用してデータ行を更新する方法は? それは不可能。また、datatable.js には、それを実現するための特殊な Ajax 呼び出しが含まれています (行: PrimeFaces 3.5 リリースの 839):
options.onsuccess = function(responseXML) {
var xmlDoc = $(responseXML.documentElement),
updates = xmlDoc.find("update");
....
$this.tbody.html(content);
私の質問は、PF 内部に深く入り込み、そのような特殊な AJAX ハンドラーを作成することなく、標準フィルターとまったく同じように、テーブル本体のみを更新するような個々のフィルター コンポーネントを使用することは可能ですか?
もちろん、dataTable の外側にフィルターを作成することは可能ですが、それよりも UX が低下します (現在、私のアプリケーションを使用している人々は、現在の設計が非常に気に入っています)。