时间:2014-10-23 09:31:30

标签: jsf-2 primefaces jsf-2.2

我使用的是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)

1 个答案:

答案 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)