首次加载 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 的用例。这是你正在使用的吗?详细说明您的用例会有所帮助。
每次出现我的页面时,它都会执行 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 的用例。这是你正在使用的吗?详细说明您的用例会有所帮助。