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

前端之家收集整理的这篇文章主要介绍了p:datatable在ajax刷新后丢失排序列和顺序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在页面上有一个按钮,导致我的数据表通过 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);
}

猜你在找的Ajax相关文章