【问题标题】:How to change primefaces databtable sort icons如何更改 primefaces databtable 排序图标
【发布时间】:2018-12-23 16:35:56
【问题描述】:

我有一个标签视图,在每个标签视图中我都有一个数据表。

这是我的代码 sn-p:

<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>

车辆.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    

如果你观察到,sortBy 属性对于所有列都有相同的,v.object 这个 v.object 有排序相关的元数据来排序。

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

我在调试代码时观察到,如果我点击列进行排序,就会调用数据表渲染器的类解码方法;

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

这个方法里面

数据表功能

类具有解码方法,它获取排序列,从框架提供的上下文参数中排序函数。

这个方法执行完成之后

@覆盖 public void encodeEnd(FacesContext context, UIComponent 组件) 抛出 IOException{}

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

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

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

【问题讨论】:

    标签: jsf primefaces xhtml


    【解决方案1】:

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

    因为如果您使用的是真正的 TabView,则 tabView 更改实际上是每次更改选项卡时的 AJAX 请求。

    【讨论】:

      猜你喜欢
      • 2015-01-26
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2014-09-06
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 2017-03-17
      相关资源
      最近更新 更多