Ajax Primefaces 数据表的分页事件不起作用
Ajax event in pagination with Primefaces dataTable not working
我有一个带有数据表的“正常”分页。第一次“加载”从数据库中引入 25 个项目。
在 ajax“页面”事件中,我将以下元素放入 25 个项目的块中。一切都与 Primefaces 5.1 版本完美配合,但在 5.2 版本中没有调用 onPageChange 方法,实际上分页什么都不做。
如果在 ajax 事件“page”中添加 process="@this" 它会调用 bean,但不是指定的 onPageChange 方法,而是标有 @PostConstruct 注释的启动方法(在此前 25 个项目和分页始终显示这些项目的方式相同)。
<p:panel id="..."
header="..."
style="..."
toggleable="true"
toggleSpeed="200" >
<p:dataTable var="some_var"
id="myDataTable"
widgetVar="pag"
first="#{[bean].first}" <-- bean attribute
value="#{[bean].collectionOfObjects}" <-- loading of the first 25 elements
rows="20"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
emptyMessage="..."
lazy="true"
rowIndexVar="rowIndex"
rowStyleClass="#{(rowIndex mod 2) eq 0? '...' : '...'}">
<p:ajax event="page"
listener="#{[bean].onPageChange}"/> <-- load the next 25 items (successively)
<p:ajax event="sort"
listener="#{[bean].orderListing}"/>
<p:column width="..."
headerText="..."
style="..."
sortBy="#{some_var.id}"
id="...">
...
</p:column>
[rest of columns]
</p:dataTable>
</p:panel>
返回(仅作为轮廓):
@PostConstruct
protected void init() {
...
this.collectionOfObjects = new GenericLazyModel<CollectionOfObjects>(...);
}
//Method not called by ajax.
public void onPageChange(PageEvent event) {
//Next 25 items
this.collectionOfObjects = new GenericLazyModel<CollectionOfObjects>(...);
}
版本:primefaces 5.2、jsf-api 2.2.2、jsf-impl 2.2.2(更新最后两个将非常昂贵)。
这里post有几种可能,但我仔细阅读了所有内容后仍未设法解决错误。
commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated
非常感谢大家!
最后经过多次测试,将PF版本更新到5.3,成功了。更新到这个版本 5.3 时的错误不是来自应用程序本身,而是来自必须更新到 v4.0.0(至少)的 primefaces-extensions 库。如果有人在更新 PF 库时遇到问题,请同时检查 primefaces-extensions 的版本。
我有一个带有数据表的“正常”分页。第一次“加载”从数据库中引入 25 个项目。 在 ajax“页面”事件中,我将以下元素放入 25 个项目的块中。一切都与 Primefaces 5.1 版本完美配合,但在 5.2 版本中没有调用 onPageChange 方法,实际上分页什么都不做。
如果在 ajax 事件“page”中添加 process="@this" 它会调用 bean,但不是指定的 onPageChange 方法,而是标有 @PostConstruct 注释的启动方法(在此前 25 个项目和分页始终显示这些项目的方式相同)。
<p:panel id="..."
header="..."
style="..."
toggleable="true"
toggleSpeed="200" >
<p:dataTable var="some_var"
id="myDataTable"
widgetVar="pag"
first="#{[bean].first}" <-- bean attribute
value="#{[bean].collectionOfObjects}" <-- loading of the first 25 elements
rows="20"
paginator="true"
paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
emptyMessage="..."
lazy="true"
rowIndexVar="rowIndex"
rowStyleClass="#{(rowIndex mod 2) eq 0? '...' : '...'}">
<p:ajax event="page"
listener="#{[bean].onPageChange}"/> <-- load the next 25 items (successively)
<p:ajax event="sort"
listener="#{[bean].orderListing}"/>
<p:column width="..."
headerText="..."
style="..."
sortBy="#{some_var.id}"
id="...">
...
</p:column>
[rest of columns]
</p:dataTable>
</p:panel>
返回(仅作为轮廓):
@PostConstruct
protected void init() {
...
this.collectionOfObjects = new GenericLazyModel<CollectionOfObjects>(...);
}
//Method not called by ajax.
public void onPageChange(PageEvent event) {
//Next 25 items
this.collectionOfObjects = new GenericLazyModel<CollectionOfObjects>(...);
}
版本:primefaces 5.2、jsf-api 2.2.2、jsf-impl 2.2.2(更新最后两个将非常昂贵)。
这里post有几种可能,但我仔细阅读了所有内容后仍未设法解决错误。
commandButton/commandLink/ajax action/listener method not invoked or input value not set/updated
非常感谢大家!
最后经过多次测试,将PF版本更新到5.3,成功了。更新到这个版本 5.3 时的错误不是来自应用程序本身,而是来自必须更新到 v4.0.0(至少)的 primefaces-extensions 库。如果有人在更新 PF 库时遇到问题,请同时检查 primefaces-extensions 的版本。