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

PrimeFaces DataTable无法按Protocolo过滤问题排查

问题:PrimeFaces DataTable无法按Protocolo字段过滤,提示“No records found”

我帮你找到问题所在啦!你遇到的核心问题是EL表达式的语法错误,导致PrimeFaces无法正确识别要过滤的目标字段,进而触发“No records found”的提示。

先看你代码里的关键错误点:
在<p:column>的filterBy属性中,你写的是{#registro.protocolo}——这是错误的写法!正确的EL表达式格式应该是#{registro.protocolo},你多写了一个前大括号{,这会让PrimeFaces完全无法解析到registro.protocolo这个字段,自然没法完成过滤逻辑。

修正后的完整代码

<p:dataTable value="#{registroBean.listarRegistros()}" var="registro" widgetVar="registroTable" id="tabelaRegistro" class="table table-striped table-hover" rendered="#{not empty registroBean.listarRegistros()}">
    <f:facet name="header">
        <p:outputPanel>
            <p:inputText id="globalFilter" onkeyup="PF('registroTable').filter()" style="width:100%" placeholder="Digite o protocolo" />
        </p:outputPanel>
    </f:facet>
    <p:column filterBy="#{registro.protocolo}">
        <f:facet name="header">Protocolo</f:facet>
        <h:outputText value="#{registro.protocolo}" />
    </p:column>
</p:dataTable>

额外的优化建议

  • 尽量避免直接在value属性中调用方法:如果listarRegistros()每次调用都会返回新的集合实例,可能会干扰PrimeFaces的过滤状态保存。建议改成在Bean初始化时加载数据,用一个属性(比如registroBean.registros)来绑定到dataTable的value上。
  • 确认字段类型匹配:如果protocolo是数字类型,确保输入的搜索内容格式和字段类型一致,PrimeFaces的全局过滤默认会做基础类型适配,但类型统一会让过滤更稳定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:52