You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:25:55