如何让PrimeFaces DataTable的columnGroup仅显示在最后一页?
解决PrimeFaces DataTable总计行仅显示在最后一页的问题
你可以通过PrimeFaces DataTable内置的分页属性判断当前页是否为最后一页,进而控制总计行的显示,具体实现如下:
- 给你的DataTable指定一个ID,方便在EL表达式中引用:
<p:dataTable id="myDataTable" var="item" value="#{bean.items}" rows="10" paginator="true"> <!-- 你的列定义 -->
- 修改footer列组的
rendered属性,通过DataTable的三个核心分页属性做判断:
<p:columnGroup type="footer"> <p:row rendered="#{(myDataTable.first + myDataTable.rows) >= myDataTable.rowCount}"> <p:column footerText="TOTAL" style="text-align:left" /> <!-- 其他合计列可在此继续添加 --> </p:row> </p:columnGroup>
关键逻辑说明
myDataTable.first:当前页第一条数据在数据集里的起始索引(从0开始)myDataTable.rows:每页显示的记录数myDataTable.rowCount:数据集的总记录数- 表达式
(first + rows) >= rowCount会在当前页为最后一页时返回true:- 例:总记录11条、每页10条,第一页
0+10=10 <11不显示总计行;第二页10+10=20 >=11显示总计行 - 若总记录刚好是每页行数的倍数(如10条、每页10条),
0+10=10 >=10会正常显示总计行,符合预期
- 例:总记录11条、每页10条,第一页
注意事项
- 如果使用懒加载(
LazyDataModel),必须确保getRowCount()方法返回正确的总记录数,否则判断逻辑会失效 - 若DataTable嵌套在表单内,EL表达式需要加上表单ID,比如
#{formId.myDataTable.first}
内容的提问来源于stack exchange,提问作者Josip
相关产品推荐
相关产品推荐

