如何更改Primefaces数据表排序图标

时间:2018-07-16 07:24:12

标签: jsf primefaces xhtml

我有一个选项卡视图,在每个选项卡视图中都有一个数据表。

这是我的代码段:

<p:tabView orientation="left" id="myTabs" activeIndex="#{myBean.currentTabIndex}" dynamic="true" cache="false">
        <p:ajax event="tabChange" immediate="true" update="@form" listener="#{myBean.onTabChange}" />
            <p:tab id="vehicleTab"
                <ui:include src="/components/vehicle.xhtml" />
            </p:tab>
        ----------- other tabs --------------
    </p:tabView>

Vehicles.xhtml是:

<p:dataTable id="myTable"  var="v" value="#{myBean.vehicles}"   rowIndexVar="rowIndex">
        <p:ajax event="sort" listener="#{myBean.sort}" />
        <p:column id="vehicleid" sortBy="#{myBean.object}"  sortFunction="#{myBean.sortVehicles}">
            <h:outputText value="v.id" />
        </p:column>
        <p:column id="type" sortBy="#{myBean.object}" sortFunction="#{myBean.sortVehicles}">
            <h:outputText value="v.typ" />
        </p:column>
        //other columns
    <p:dataTable    

如果您观察到,所有列 v.object sortBy 属性都相同 此v.object具有要排序的与排序相关的元数据。

当我单击列时,排序工作正常,排序图标正确显示。但是,如果我导航到另一个选项卡,然后返回到“车辆”选项卡,则所有排序图标都显示相同的desc或asc先前排序图标。

调试代码时,我发现如果单击列进行排序,则会调用数据表渲染器的类解码方法;

  

@Override       公共无效的解码(FacesContext上下文,UIComponent组件){       }

此方法内

  

DataTableFeature

类具有解码方法,它采用了排序列,并根据框架提供的上下文参数进行排序。

此方法执行完成后,

  

@Override       公共无效encodeEnd(FacesContext上下文,UIComponent组件)引发IOException {}

调用此方法并准备排序图标。

但是当我切换选项卡并返回时,不会直接调用 decode 方法,而会调用 encodeEnd 方法,为所有列准备相同的排序图标。

这是较早的实现,是否可以在不更改 sortBy 属性的情况下解决此问题?

1 个答案:

答案 0 :(得分:0)

我认为这类似于:p:datatable loses sort column and order after ajax refresh

因为tabView的更改(如果您使用的是真实的TabView,则每次更改标签时实际上都是AJAX请求。