首次加载 Oracle ADF 时不加载 table

Don't load table on first load Oracle ADF

每次出现我的页面时,它都会执行 table 查询。我试过这样做,

https://blogs.oracle.com/shay/entry/preventing_queries_when_page_f

但它仍然发生。我怎样才能解决这个问题?我试过将刷新条件设置为从不,但是我无法取回任何数据。我正在使用 JDev 11g。

谢谢。

我可以分享我是如何在 JDeveloper 12.1 中做到这一点的。我不确定它是否适用于 11g。我也不确定这是最好的方法。但这对我有用。

这个想法不是阻止初始查询的执行,而是确保它快速发生并且 return 没有数据。方法是在应用程序模块的视图实例中设置初始查询条件。

此方法假设您的视图对象中至少有一个绑定变量。如果你不这样做,你将需要为此添加一个。

  • 双击应用程序模块
  • 单击底部的 "Overview" 选项卡
  • 单击左侧的 "Data Model" 选项卡,以便查看应用程序模块的数据模型组件
  • 在右侧的 "Data Model" 树中,单击查看对象使用情况("MyObjectVO1",例如)。
  • 单击数据模型树右上角的 "Edit..."。

在这里,您可以指定页面最初使用的查看条件。所以, * 设置将 (A) 快速执行和 (B) return 无数据

的初始参数

然后,稍后,当您准备好让您的查询 运行.

时,以编程方式重置绑定变量以更正 return 数据的值

我知道的最简单的方法是在页面定义中正确设置迭代器的 "Refresh" 属性。 为此,请设置 refresh=ifNeeded,然后使用表达式语言设置 RefreshCondition,如下所示:#{viewScope.yourBean.refresh}

public class YourBeanClass {

    private boolean refresh = false;

    public void someAction(ActionEvent actionEvent) {
       //some custom logic to set refresh flag
       refresh = true;
    }

    public boolean isRefresh() {
        return refresh();
    }
}

使用此代码,您可以轻松管理需要刷新模型的时刻。

虽然这些解决方案可以阻止查询的执行,但我想问一下,用户在没有先进行搜索的情况下看到 table 出现在网页上的用例是什么?

ADF 被构建为自动查询,因为通常网页上会有一个 af:query 或 af:quickquery 组件,以允许用户输入查询。执行查询后,将返回结果并填充 table 或表单(取决于页面设计)。在页面上包含这些搜索组件中的任何一个都会阻止页面执行查询,直到执行搜索为止。您还可以使用任务流在进入页面时执行查询,并将数据控件中的执行操作添加到导航 into/prior 以到达页面。

请注意,Shay 的博客 post 发表于 2009 年,涵盖了不使用搜索组件而是使用 Execute with Params 的用例。这是你正在使用的吗?详细说明您的用例会有所帮助。