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
相关产品推荐
相关产品推荐

