ajax - p :datatable loses sort column and order after ajax refresh

标签 ajax sorting jsf-2 primefaces datatable

我在页面上有一个按钮,该按钮使我的数据表通过AJAX请求刷新。像这样的东西:

<h:form id="datatable">
<p:dataTable/>
</h:form>
<p:commandButton update=":datatable">

一切都很好,但在刷新表时它会恢复为不对任何内容进行排序,同时仍显示它是根据先前的值进行排序的。换句话说,标题仍然突出显示,并且箭头仍指向排序方向,但实际上没有进行排序。显然,这并不理想。

理想情况下,我希望组件将其排序顺序保持在 View 状态,然后在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 - p :datatable loses sort column and order after ajax refresh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032356/

相关文章:

javascript - 来自单个请求的 ajax 请求数组

javascript - Ajax 在一个事件中只执行一次

javascript - 当浏览器检索缓存的 html 页面时,JavaScript 会再次运行吗?

JSF 2 : noSelectionOption problem for selectOneMenu with converter

java - FacesContext.getCurrentInstance() 在 FacesServlet(?) 处理的请求中返回 null

asp.net - 更新面板不更新内容

PHP/MySQL : querying MySQL with an array and getting results in an array

c# - 列表未使用 IComparable<T> 排序

sorting - sortedBy 参数作为变量

session - ViewExpiredException,页面无法恢复