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

Oracle ADF Partial Page Refresh失效 点击按钮后表格无法刷新求助

问题核心原因

  • 你误用了returnListener:该监听器仅用于处理弹出对话框关闭后返回的事件,普通无弹窗交互的按钮点击不会触发returnListener,因此你写的刷新表格逻辑从始至终没有执行。
  • 可能缺失组件绑定的set方法:ADF组件的后台绑定必须同时提供get/set方法,仅写get方法会导致绑定失效,无法正确获取表格组件实例。
  • 按钮未开启局部提交:默认的整页提交逻辑如果没有配置局部刷新规则,也会导致表格不更新。

解决步骤

  1. 移除按钮的returnListener配置,将表格刷新逻辑整合到actionListener对应的方法中,在数据更新完成后执行刷新。
  2. 给按钮添加partialSubmit="true"属性,启用局部提交。
  3. 补全表格绑定的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:18:01