我正在使用primefaces 3.4(我知道是旧版本,但无法升级atm),我知道在primefaces 5中,我的问题已解决(但我真的不能升级atm)
在通过分页使用延迟/非延迟加载数据表时,遇到以下问题,
1)<p:dataTable
分页后ajax输入(内部)未触发(页面> 1)
2)元素状态(<h:selectBooleanCheckbox
)不会反映在表单提交上(即使我确实看到它们已发送到服务器)
知道是什么原因导致了这种primefaces的不当行为/如何对其进行追踪/如何在3.4版本中对其进行修复?
我的猜测与下面的BalusC回答commandLink / commandButton / ajax后备bean操作/侦听器方法未调用有关(N#4)
现在,我用以下技巧解决了它:
<p:ajax event="page" listener="#{myBean.detectPageEvent}" oncomplete="updateModel()"></p:ajax>
beandetectPageEvent
方法的内容如下所示:
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)有关
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句