PrimeFaces 10 dataTable过滤后编辑/取消时行数据消失不更新如何解决
PrimeFaces 10 过滤后dataTable编辑行丢失问题解决方案
该问题是PrimeFaces可编辑dataTable结合过滤功能时的典型配置错误,核心原因是编辑事件触发的Ajax请求没有同步更新dataTable视图、以及后端过滤数据集没有和原始数据保持同步,具体解决方案如下:
- 修正Ajax更新范围:现有代码中行编辑和取消事件的Ajax仅更新了消息组件,未同步更新dataTable本身,导致修改后的数据没有同步到过滤视图中。需要将两个
<p:ajax>标签的update属性修改为同时包含dataTable组件:
<p:ajax event="rowEdit" listener="#{serviceBean.onRowEdit}" update=":table:msgs :table:userRecordTable" /> <p:ajax event="rowEditCancel" listener="#{serviceBean.onRowCancel}" update=":table:msgs :table:userRecordTable" />
- 校验后端Bean配置:确保
serviceBean使用@ViewScoped作用域,避免每次Ajax请求后过滤数据集filterdDataVo被重置;同时在onRowEdit方法中修改完原始数据集dataVo的对应行数据后,同步更新filterdDataVo中的对应行,保证过滤数据集和原始数据一致。 - 修正属性拼写问题:你代码中
filteredValue绑定的属性名是filterdDataVo,少了一个字母e,如果后端Bean里的属性是正确拼写的filteredDataVo,会直接导致过滤数据集绑定失败,编辑后过滤结果丢失。 - 保留过滤状态优化:如果需要编辑完成后仍然保留当前的过滤条件,不需要用户重新输入搜索内容,可以在上述两个
<p:ajax>标签中添加resetValues="false"属性,避免过滤输入框的值被Ajax请求重置。
内容的提问来源于stack exchange,提问作者yasmin
相关产品推荐
相关产品推荐

