如何以编程方式对primefaces数据表中的列重新排序

如何以编程方式对primefaces数据表中的列重新排序,primefaces,jsf-2,datatable,Primefaces,Jsf 2,Datatable,我有一个datatable,它有10列,以4:4:2的方式分组。现在,前两个组(共4个)是固定的,而最后两个组可以根据条件添加到任何组(一次添加一个或两个)。 有没有办法为列设置索引,以便可以根据条件对它们进行排序? 我看到Primefaces使用drag n drop重新排序给出了我想要的结果,除了我希望在显示表格之前重新排序是可编程的和设置的 我遇到了基本相同的问题:在允许用户重新排列列之后,很容易将排列保存到cookie中,但是如何在一天后恢复顺序 据我所知,没有primefaces方法可

我有一个datatable,它有10列,以4:4:2的方式分组。现在,前两个组(共4个)是固定的,而最后两个组可以根据条件添加到任何组(一次添加一个或两个)。 有没有办法为列设置索引,以便可以根据条件对它们进行排序?
我看到Primefaces使用drag n drop重新排序给出了我想要的结果,除了我希望在显示表格之前重新排序是可编程的和设置的

我遇到了基本相同的问题:在允许用户重新排列列之后,很容易将排列保存到cookie中,但是如何在一天后恢复顺序

据我所知,没有primefaces方法可以做到这一点,但可以用一点javascript进行黑客攻击。(我试过primefaces 6.0)

1) 为所有列指定唯一的样式类,如:

styleClass="mystyle col0"
styleClass="mystyle col1"
styleClass="mystyle col2"
...
2) 将styleClass字符串转换为有效的css选择器,并以列的顺序存储所需的列顺序,如:

".mystyle.col2,.mystyle.col0,.mystyle.col1"
把它放进饼干里,或者储存起来,然后随意取回

3) 编写javascript函数将单元格重新排列为所需的顺序:

function reorder() {              
    var o = getCookie('orderString');            
    var a = o.split(",");
    for (var i = a.length - 1; i >= 0; i--) {                 
        $(a[i]).each(function() {
            $(this).prependTo($(this).parent())
        });
    }
}

function getCookie(name) {
    var value = "; " + document.cookie;
    var parts = value.split("; " + name + "=");
    if (parts.length === 2)
        return parts.pop().split(";").shift();
}
(不要使用EL表达式从支持bean获取订单字符串,因为它在页面呈现时求值,因此如果用户再次重新排列列,则不会更新。)

4) “每次需要时”执行reorder()

您肯定需要在页面加载时使用它:

$(document).ready(function() {
    reorder();
});
但在分页事件上也是如此,因此添加如下内容:

<p:ajax event="page" oncomplete="reorder();" />


(也许其他时候我还没有见过面。)

搜索保留重新排序的列顺序的示例。如果在再次显示时可以使用该持久顺序,那么您就有了解决方案