我使用的是primefaces 3.4(我知道的旧版本,但不能升级atm),我知道在primefaces 5中我的问题已经解决(但我真的无法升级atm)< / p>
当使用具有分页的延迟/非延迟加载数据表时,我遇到以下问题,
1)ajax输入(在<p:dataTable
内)未在分页后触发(页面&gt; 1)
2)元素状态(<h:selectBooleanCheckbox
)不会反映在表单提交上(即使我看到它们被发送到服务器)
有什么想法导致这些错误的表面/如何跟踪它/如何在3.4版本中修复它?
我的猜测它与以下BalusC答案有关commandLink/commandButton/ajax backing bean action/listener method not invoked(N#4)
答案 0 :(得分:0)
现在我用以下技巧解决了这个问题:
<p:ajax event="page" listener="#{myBean.detectPageEvent}" oncomplete="updateModel()"></p:ajax>
bean detectPageEvent
方法的内容如下所示:
public void detectPageEvent(PageEvent ev) {
//SET page number
((LazyDeviceDataModel) lazyModel).setPageNumber(ev.getPage());
}
其中js updateModel函数的内容为:
setTimeout(function () {
$('#table-refresh-after-page').click();
}, 10);
并在xhtml页面中添加了以下内容
<h:commandButton id="table-refresh-after-page"
styleClass="hide" action="#{myBean.updatePageNumber}">
<f:ajax execute="@form" render="@form"></f:ajax>
</h:commandButton>
updatePageNumber
方法看起来像这样
public void updatePageNumber() {
DataTable dataTable = (DataTable) FacesContext.getCurrentInstance().getViewRoot()
.findComponent("my-form:my-table");
dataTable.setFirst(((LazyDeviceDataModel) lazyModel).getPageNumber() * 10);
}
正如我之前所说:我的猜测它与以下BalusC答案有关[commandLink / commandButton / ajax支持bean动作/监听器方法未被调用] [1](N#4)