加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

p:datatable在ajax刷新后丢失排序列和顺序

发布时间:2020-12-16 01:34:31 所属栏目:百科 来源:网络整理
导读:我在页面上有一个按钮,导致我的数据表通过 AJAX请求进行刷新.这样的东西 h:form id="datatable"p:dataTable//h:formp:commandButton update=":datatable" 除了表格被刷新之外,它还没有进行任何排序,同时仍然显示它是基于以前的值排序的,所以这一切都很好.换
我在页面上有一个按钮,导致我的数据表通过 AJAX请求进行刷新.这样的东西
<h:form id="datatable">
<p:dataTable/>
</h:form>
<p:commandButton update=":datatable">

除了表格被刷新之外,它还没有进行任何排序,同时仍然显示它是基于以前的值排序的,所以这一切都很好.换句话说,标题仍然突出显示,箭头仍然指向排序方向,但实际上没有排序.显然这不是理想的.

理想情况下,我希望组件在视图状态下保持排序顺序,然后在AJAX请求期间提交正确的参数(以便正确定义排序).我错过了一个参数吗?有其他人有这个问题吗?

从表中可以看出,当我们期待一个排序时,它会发布以下选项:

<componentID>_sortDir
<componentID>_sortKey
<componentID>_sorting
<componentID>_updateBody

当我刷新表单时,这不会发生.如果我只是刷新表,也不会发生(认为我可以通过直接更新组件来处理事情).有没有办法让表刷新正确?

我写了一个扩展到@ truemmer的解决方案.他将排序顺序恢复到默认值,其中我的还原到用户选择的先前排序.
function postAjaxSortTable(datatable)
{
    var selectedColumn = datatable.jq.find('.ui-state-active');
    if(selectedColumn.length <= 0)
    {
        return;
    }
    var sortorder = "ASCENDING";
    if(selectedColumn.find('.ui-icon-triangle-1-s').length > 0)
    {
        sortorder = "DESCENDING";
    }
    datatable.sort(selectedColumn,sortorder);
}

更新与truemmer的作品相同的表,如下所示:

<p:commandButton value="refresh" action="#{tableController.refreshPrices}" update="myTable" oncomplete="postAjaxSortTable(myTableWidget)" />

编辑:Primefaces 4.0 MultiSort支持

function postAjaxSortTable(datatable) {
    var selectedColumn = undefined;

    // multisort support
    if(datatable && datatable.cfg.multiSort) {
        if(datatable.sortMeta.length > 0) {
            var lastSort = datatable.sortMeta[datatable.sortMeta.length-1];
            selectedColumn = $(document.getElementById(lastSort.col));
        }
    } else {
        selectedColumn = datatable.jq.find('.ui-state-active');
    }

    // no sorting selected -> quit
    if(!selectedColumn || selectedColumn.length <= 0) {
        return;
    }

    var sortorder = selectedColumn.data('sortorder')||"DESCENDING";
    datatable.sort(selectedColumn,sortorder,datatable.cfg.multiSort);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读