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

Primefaces 10 DataTable渲染报错Table 'var'和Column 'field'属性不能为空

触发原因
  • 直接诱因是durada列的sortBy属性赋值为空字符串sortBy="",根据你贴的Primefaces UITable源码,解析排序规则时会校验field值非空,空字符串会触发校验失败抛出异常。
  • Primefaces 10处理dataTable排序逻辑时,无论表格绑定的数据集是否为空,只要表格处于渲染状态,就会预先解析所有列的sortBy属性生成排序规则,所以即使itemss是空列表,依然会执行sortBy解析逻辑,触发异常。
  • 额外说明:你当前给dataTable配置的rendered="#{empty personaFormacioBean.itemss}"逻辑存在明显问题:该配置表示只有当itemss为空时才渲染表格,有数据时表格反而不展示,和常规使用逻辑相悖,也放大了空列表下的报错概率。
解决方案
  1. 修复异常列配置:处理durada列的空sortBy属性
    • 如果该列需要排序:将sortBy补全为对应字段,改为sortBy="#{item.modul.durada}"
    • 如果该列不需要排序:直接删除空的sortBy属性,同时添加sortable="false"关闭该列的排序能力,避免Primefaces解析无效排序字段
  2. 修正dataTable渲染逻辑:
    • 如果你需要实现「有数据展示数据、无数据展示emptyMessage提示」的常规效果,直接删除dataTable上的rendered="#{empty personaFormacioBean.itemss}"配置即可,Primefaces的emptyMessage会自动在数据集为空时生效,无需手动控制渲染条件。
    • 如果确实需要特殊渲染控制,建议调整为rendered="#{personaFormacioBean.itemss != null}",避免空指针同时兼容有无数据的场景。
  3. (可选优化)如果不需要全局默认排序,可以删除dataTable上的sortBy和sortOrder全局配置,进一步降低排序逻辑的异常风险。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:51:03