【问题标题】:<p:dataTable ajax issues after pagination<p:dataTable ajax 分页后的问题
【发布时间】:2014-12-18 22:43:16
【问题描述】:

我正在使用 primefaces 3.4(我知道的旧版本,但无法升级 atm),我知道在 primefaces 5 中我的问题已解决(但我真的无法升级 atm)

当使用带有分页的延迟/非延迟加载数据表时,我遇到以下问题,

1) ajax 输入(在&lt;p:dataTable 内)在分页后没有触发(页面> 1)

2) 元素状态 (&lt;h:selectBooleanCheckbox) 不会在表单提交时反映出来(即使我确实看到它们被发送到服务器)

知道是什么导致了 primefaces 的这种不当行为/如何追踪它/如何在 3.4 版本中修复它?

我猜这和下面的 BalusC 回答 commandLink/commandButton/ajax backing bean action/listener method not invoked (N#4) 有关系

【问题讨论】:

    标签: jsf-2 primefaces jsf-2.2


    【解决方案1】:

    现在我用以下技巧解决了它:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 2015-08-05
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多