Oracle ADF Partial Page Refresh失效 点击按钮后表格无法刷新求助
问题核心原因
- 你误用了
returnListener:该监听器仅用于处理弹出对话框关闭后返回的事件,普通无弹窗交互的按钮点击不会触发returnListener,因此你写的刷新表格逻辑从始至终没有执行。 - 可能缺失组件绑定的set方法:ADF组件的后台绑定必须同时提供get/set方法,仅写get方法会导致绑定失效,无法正确获取表格组件实例。
- 按钮未开启局部提交:默认的整页提交逻辑如果没有配置局部刷新规则,也会导致表格不更新。
解决步骤
- 移除按钮的
returnListener配置,将表格刷新逻辑整合到actionListener对应的方法中,在数据更新完成后执行刷新。 - 给按钮添加
partialSubmit="true"属性,启用局部提交。 - 补全表格绑定的setter方法,确保组件绑定生效。
修正后代码示例
页面按钮配置
<f:facet name="additionalToolbarButtons"> <af:toolbar> <af:commandToolbarButton text="ShowAll" partialSubmit="true" actionListener="#{backingBeanScope.Bean.showAllRows}"/> </af:toolbar> </f:facet>
后台Java代码
import javax.faces.event.ActionEvent; import oracle.adf.view.rich.context.AdfFacesContext; import oracle.adf.view.rich.component.rich.data.RichTable; // 你的Bean类内部代码 private RichTable refreshTable; public void showAllRows(ActionEvent actionEvent) { // 原有查询所有表格行数据的业务逻辑,确保更新表格绑定的数据源集合 // ...... // 数据更新完成后调用刷新方法 refreshTable(); } private void refreshTable() { AdfFacesContext ctx = AdfFacesContext.getCurrentInstance(); // 加非空判断避免空指针 if (getRefreshTable() != null) { ctx.addPartialTarget(getRefreshTable()); } } public RichTable getRefreshTable() { return refreshTable; } // 补全set方法 public void setRefreshTable(RichTable refreshTable) { this.refreshTable = refreshTable; }
额外排查点
如果修改后仍未生效,可按以下顺序排查:
- 在
refreshTable方法中加断点,确认方法被正常调用。 - 确认
showAllRows方法执行完成后,表格value属性绑定的集合数据确实已经更新为全量数据。 - 检查Bean的作用域是否合理,避免请求结束后数据被重置。
内容的提问来源于stack exchange,提问作者Sudhanshu Goyal
相关产品推荐
相关产品推荐

