2017-01-26 6 views
0

私はデータテーブル(primefaces 4.0)を持っており、データの更新後にre-filterテーブルを適用するためにwidgetVarを使用しています。 employeesDataTable_WV.filter();が実際にテーブルのフィルタリングと更新を完了したときにのみ、関数doSomething()を呼び出す必要があります。このリンクで widgetVar.filter()が実際に完了し、p:datatableを更新した後に何かを行う

は、AJAX要求を行うようだ filter機能

https://searchcode.com/codesearch/view/2686053/

をどのように機能するか、コンポーネントをアップデートするよりも示してあります。

ここに私のコード例

<h:form id="form"> 

    <p:remoteCommand name="myRemote" actionListener="viewEmployeesManagedBean.refreshEmployees" 
      update=":form:employeesDataTable" 
      oncomplete="employeesDataTable_WV.filter();doSomething();"/> 

    <p:dataTable id="employeesDataTable" 
     value="#{viewEmployeesManagedBean.employees}" var="employee" widgetVar="employeesDataTable_WV"> 
     [...] 
    </p:dataTable> 
    </h:form> 

私は、DataTableにはemployeesDataTable_WV.filter()関数によって濾過し、更新された後にのみdoSomethingの関数を呼び出す必要があります。 私のテストはすべてうまくいかず、doSomething関数は常にデータテーブルの更新前に呼び出されます。

ありがとうございました。あなたは何をすべき

答えて

1

p:dataTableにAJAXイベントハンドラを追加し、フィルタイベントのoncompletedoSomething()を入れて、p:remoteCommandからそれを削除することです。

<p:ajax event="filter" oncomplete="doSomething()" /> 

あなたは/サーバーへのラウンドトリップを持っている必要がありたくない場合は、PrimeFaces拡張

p:ajaxを置き換えることができますそして、あなたは唯一のfilter()が直接呼び出されたときにそれが起こるしたい場合widgetVarでは、filter()を呼び出す前に直接セマフォを設定し、doSomething()が設定されていればチェックインしてください。

<p:remoteCommand ... 
     oncomplete="mySemaphore = true;employeesDataTable_WV.filter();"/> 

function doSomething() { 
    if(mySemaphore == true;) { 

     ... 

     mySemaphore = false; 
    } 

    // just do nothing if called from editing in one of the filter fields 
} 

これは、(答える時)現在の6.1-SNAPSHOT(最も可能性の高い超えた)まで4.0用だけでなく、それ以降のバージョンのために働く必要があります

も参照してください

+0

申し訳ありませんが、このようにして、 ' \t \t \tを \t \t \t \t \t \t \t \t \t \t \t \t「 それは本当ですか、私は間違っていますか? 私はこのような振る舞いはしたくありません – HouseFragance

+0

正しいのですか?それはあなただけが意味するものですか?次に、 'employeesDataTable_WV.filter();'セマフォを設定する前にリモートコマンドの不完全な部分に創造的に(開発者として) 'と 'doSomething()'の中で最初に設定されているかどうかチェックします。それから直接戻ってくるだけではない場合は、実際に何かをしてください。 – Kukeltje

関連する問題