Primefaces 数据表和当前页面不工作
Primefaces datatable and current page not working
我正在使用 Prime Faces 6.0。
我有一个带有 LazyDataModel 的数据表。用户可以使用内置分页器更改页面。
当用户从第一个页面切换到第二个页面时,我需要知道当前页面,并且在客户端需要它。
这是数据表的代码
<p:dataTable
id="listingsTable"
value="#{listingsLazyDataModel}"
var="actualAd"
paginator="true"
rows="#{applicationScopedBean.advertisingsPaginationSize}"
lazy="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="10,20,30"
paginatorPosition="bottom"
widgetVar="listingsTableDesktop"
first="#{searchAdvertisingModel.currentPage*applicationScopedBean.advertisingsPaginationSize}">
...
...
<p:ajax event="page" listener="#{listingsController.pageChanged}" oncomplete="pageChangedOnDetails(PF('listingsTableDesktop'))" />
...
---
</p:dataTable>
这是js代码
function pageChangedOnDetails(listingsTableDesktop){
console.log(listingsTableDesktop.paginator.getCurrentPage());
}
问题是 getCurrentPage() 方法 returns 上一页。不是实际的。仅供参考,页面以 0 为基数。因此第一页是第 0 页。
实际行为与预期行为的示例
- 用户登陆页面并看到第一页。
- 用户切换到第二页。 getCurrentPage -> 0 错误预期 1
- 用户切换到第三页。 getCurrectPage -> 1 错误预期 2
- 用户切换到第一页。 getCurrentPage -> 2 错误预期 0
我可以用什么方法解决这个问题?
谢谢
基数是 0,但您的事件函数似乎 运行 很快。
尝试 运行 你的函数 else where other then event="page".
我的意思是,当您的页面为 1(默认)并且您单击例如第 3 页时,它会输出 0(0+1= 第 1 页)并且仅在此之后才会转到第 3 页。如果您现在单击第 6 页,它会输出 2(2+1= 第 3 页),然后才会转到第 6 页。
即使使用 oncomplete 而不是 onclick 也会发生这种情况。希望对你有帮助。
此问题是 PF 6.0 和 6.1 中发现的错误,但在当前版本 (6.2) 中已解决此问题
我正在使用 Prime Faces 6.0。
我有一个带有 LazyDataModel 的数据表。用户可以使用内置分页器更改页面。 当用户从第一个页面切换到第二个页面时,我需要知道当前页面,并且在客户端需要它。
这是数据表的代码
<p:dataTable
id="listingsTable"
value="#{listingsLazyDataModel}"
var="actualAd"
paginator="true"
rows="#{applicationScopedBean.advertisingsPaginationSize}"
lazy="true"
paginatorTemplate="{FirstPageLink} {PreviousPageLink} {CurrentPageReport} {NextPageLink} {LastPageLink}"
rowsPerPageTemplate="10,20,30"
paginatorPosition="bottom"
widgetVar="listingsTableDesktop"
first="#{searchAdvertisingModel.currentPage*applicationScopedBean.advertisingsPaginationSize}">
...
...
<p:ajax event="page" listener="#{listingsController.pageChanged}" oncomplete="pageChangedOnDetails(PF('listingsTableDesktop'))" />
...
---
</p:dataTable>
这是js代码
function pageChangedOnDetails(listingsTableDesktop){
console.log(listingsTableDesktop.paginator.getCurrentPage());
}
问题是 getCurrentPage() 方法 returns 上一页。不是实际的。仅供参考,页面以 0 为基数。因此第一页是第 0 页。
实际行为与预期行为的示例
- 用户登陆页面并看到第一页。
- 用户切换到第二页。 getCurrentPage -> 0 错误预期 1
- 用户切换到第三页。 getCurrectPage -> 1 错误预期 2
- 用户切换到第一页。 getCurrentPage -> 2 错误预期 0
我可以用什么方法解决这个问题? 谢谢
基数是 0,但您的事件函数似乎 运行 很快。
尝试 运行 你的函数 else where other then event="page".
我的意思是,当您的页面为 1(默认)并且您单击例如第 3 页时,它会输出 0(0+1= 第 1 页)并且仅在此之后才会转到第 3 页。如果您现在单击第 6 页,它会输出 2(2+1= 第 3 页),然后才会转到第 6 页。
即使使用 oncomplete 而不是 onclick 也会发生这种情况。希望对你有帮助。
此问题是 PF 6.0 和 6.1 中发现的错误,但在当前版本 (6.2) 中已解决此问题