jsf - 如何更改 primefaces databtable 排序图标
问题描述
我有一个选项卡视图,在每个选项卡视图中我都有一个数据表。
这是我的代码片段:
<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 上一个排序图标。
当我调试代码时,我观察到,如果我单击列进行排序,则会调用数据表渲染器的类解码方法;
@Override public void decode(FacesContext context, UIComponent 组件) { }
在这个方法里面
数据表功能
类具有解码方法,它采用排序列,从框架提供的上下文参数中排序函数。
在此方法执行完成后
@Override public void encodeEnd(FacesContext context, UIComponent component) throws IOException{}
调用此方法并准备排序图标。
但是当我切换选项卡并返回时,不会直接调用解码方法,而是调用encodeEnd方法,为所有列准备相同的排序图标。
这是较早的实现,有没有办法在不改变sortBy属性的情况下解决这个问题?
解决方案
我认为这与此类似: p:datatable 在 ajax 刷新后丢失排序列和顺序
因为如果您使用真正的 TabView,则 tabView 更改实际上是每次更改选项卡时的 AJAX 请求。
推荐阅读
- excel - 让 IF 函数更高效
- javascript - 如何在运行时检查哪个模块在Javascript中调用了类的构造函数?
- python - AttributeError:“外星人”对象没有属性“矩形”
- android - 如何从片段内的列表视图打开链接网址?
- java - 如何在构建期间或 Spring Boot 启动期间验证注释?
- swift - SwiftUI:如何仅在用户停止输入 TextField 时运行代码?
- flutter - 如何在 Flutter 底部导航栏中的特定选项卡中加载数据
- python - 如何使用请求抓取单个 URL - 多页面
- docker - 如何在 sphinxsearch Docker 容器中运行索引器?
- spring-boot - 文档解析器的最佳实践