Primefaces DataTable RowGroup(含HeaderRow)如何反转排序?
解决PrimeFaces DataTable中p:headerRow分组行降序排序问题
要让p:headerRow的分组行按java.time.Instant类型字段降序排列,核心是明确分组行的排序依赖于DataTable的整体数据顺序或排序配置,而非列上的sortOrder属性。以下是两种可行方案:
方案一:后端提前排序数据
直接在Java后端对数据源按目标字段降序排序,前端渲染时分组会自然遵循该顺序:
// 假设auditLines是List<AuditLine>类型 auditLines = auditLines.stream() .sorted(Comparator.comparing( item -> item.getInventaireAudit().getInventaire().getCreationTime(), Comparator.reverseOrder() )) .collect(Collectors.toList());
方案二:前端通过DataTable配置控制排序
给p:dataTable添加sortBy和sortOrder属性,绑定分组字段并指定降序,PrimeFaces会自动按该规则排序并分组:
<p:dataTable value="#{comptaPeriodeView.auditLines}" var="item" id="auditLines" widgetVar="auditLinesTb" sortBy="#{item.inventaireAudit.inventaire.creationTime}" sortOrder="desc"> <p:headerRow field="inventaireAudit.inventaire.creationTime" expandable="true" expanded="true"> <p:column colspan="7"> <div class="inline-flex align-items-center" style="vertical-align: middle"> <h:outputText value="#{format.zdEuropeParis(item.inventaireAudit.inventaire.creationTime)}"> <f:convertDateTime type="zonedDateTime" pattern="dd/MM/yyyy HH:mm:ss" /> </h:outputText> </div> </p:column> </p:headerRow> <!-- 补充你的其他列定义 --> </p:dataTable>
关键说明
- 原代码中给
<p:column>设置sortOrder无效,因为该属性仅控制列头点击后的排序行为,不影响分组行的初始排序逻辑。 - 对于官方「Row Group」示例的类似问题,只需给示例中的
p:dataTable添加对应分组字段的sortBy和sortOrder="desc"即可反转分组顺序。比如示例分组字段为category,则设置sortBy="#{item.category}" sortOrder="desc"。
内容的提问来源于stack exchange,提问作者grigouille
相关产品推荐
相关产品推荐

