【发布时间】: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