gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 01:42:40 24 4
gpt4 key购买 nike

我在页面上有一个按钮,该按钮使我的数据表通过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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com