Graeme
Graeme

Reputation: 1117

Don't load table on first load Oracle ADF

Everytime my page comes up it executes the table query. I tried doing this,

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

but it still happens. How can I fix this? I've tried setting the refresh condition to never, but then I can't get any data back. I'm using JDev 11g.

Thanks.

Upvotes: 1

Views: 2656

Answers (3)

Joe
Joe

Reputation: 3347

While these solutions will work to prevent the query from executing, I would ask what is the use case that a user sees a table appear on a web page without doing a search first?

ADF is built to query automatically because normally a web page will have an af:query or af:quickquery component on the page to allow the user to enter a query. Once the query is executed, the results are returned and populate the table or form (depending on the page design). Including either of these search components on the page will prevent the page from executing the query until the search is executed. You can also execute a query on entry to the page using a taskflow and adding an Execute operation from the data control to the navigation into/prior to getting to the page.

Note that Shay's blog post is from 2009 and covers the use case of not using a search component and instead uses Execute with Params. Is this what you are using? Saying more about your use case would be helpful.

Upvotes: 0

vssk
vssk

Reputation: 465

The most simple way i know is to set up correctly "Refresh" attribute on iterator in the page definition. To do that set refresh=ifNeeded, then set RefreshCondition with expression language, something like this: #{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();
    }
}

With this code you can simply manage the moment when you need to refresh your model.

Upvotes: 1

Matthew McPeak
Matthew McPeak

Reputation: 17934

I can share how I did this in JDeveloper 12.1. I am not sure whether it works in 11g. Nor am I sure it's the best way to do it. But it worked for me.

The idea is to not prevent the initial query execution, but, rather, to make sure it happens quickly and returns no data. The approach is to set the initial query criteria in the View Instance of your Application Module.

This approach assumes you have at least one bind variable in your view object. If you do not, you will need to add one just for this.

  • Double click on the Application Module
  • Click on the "Overview" tab at the bottom
  • Click on the "Data Model" tab on the left, so that you are viewing the Data Model Components of your Application Module
  • In the "Data Model" tree on the right, click once on the View Object Usage ("MyObjectVO1", e.g.).
  • Click the "Edit..." in the upper-right corner of the Data Model tree.

Here, you can specify view criteria to be used initially for the page. So, * Set an initial parameter that will (A) execute quickly and (B) return no data

Then, later, programatically reset the bind variables to correct values that will return data, when you are ready to let your query run.

Upvotes: 2

Related Questions