1

私はprimefaces datatableを持っています。page change eventクライアント側 API を使用して現在のページ番号を知る必要があります。

私は使っている、

<p:ajax event="page" oncomplete="myFunction(usersWidget);"/>

myFunction() の中に私は持っています

debugger;
console.log(usersWidget.paginator.getCurrentPage());

問題は、oncomplete新しいページがページネーターに設定される前に、ページ イベント内のコールバックが呼び出される(PrimeFaces.widget.Paginator.setPage)ことです。これをデバッガでトレースしました。

そうは言っても、oncomplete コールバック内で、現在のページ番号ではなく、以前のページ番号を取得します。

ページのリンクをクリックした後、ページが設定された後にコールバックを取得できれば、現在のページがわかります。

編集:ドキュメントによると、ajax の完了後と DOM の更新後にコールバックが呼び出されます。それでは、何が間違っている可能性がありますか?

ポインタをください?

4

1 に答える 1

2

その奇妙な、ページが更新された後に oncomplete が呼び出される原因...

パラメータを渡さoncomplete="myFunction();" ずに呼び出すのはどうですか?

そのように古いオブジェクト(古い情報を含む)を渡している可能性があります...とにかくusersWidgetはグローバル変数です... ansはjsファイルに存在する必要があります

クライアント側のAPIが正しい値と同期されていないようです

回避策として、このようにサーバーからページの値を渡すことを試みることができます

DataTable dataTable = (DataTable) 
     FacesContext
         .getCurrentInstance()
         .getViewRoot()
         .findComponent("someOformID:someTableId");

または、上記の行の代わりに、

PageEvent.getPage(); //PageEvent is an argument to you listener
myPageHolder = dataTable.getPage();

この値を Bean プロパティに配置し、 xhtml の隠し値の中に配置するよりも、その隠し値を更新してp:ajax updatejs 内からアクセスするよりも

于 2012-12-02T09:06:22.717 に答える