Правильный способ выполнения запроса в вспомогательном компоненте и обновления таблицы в ADF

#oracle #oracle-adf

#Oracle #oracle-adf

Вопрос:

У меня есть кнопка поиска, которая должна выполнить метод резервного компонента, выполнить запрос, а затем обновить таблицу. Я меняю параметры привязки запроса в процессе. Каков наилучший способ сделать это?

Спасибо!

Ответ №1:

Лучший способ — следовать модели MVC. Для этого просто используйте этот алгоритм:

Создайте реализацию вашего интерфейса viewobject. Здесь вы можете определить метод с параметрами, которые вы передадите в запрос. Для этого просто перейдите к определению Viewobject — «Вкладка Java» — «Классы Java» отредактируйте и отметьте «Создать класс объекта просмотра: YourViewObjectViewImpl» и «Включить средства доступа к переменной привязки», затем нажмите кнопку ok. Узнайте класс YourViewObjectViewImpl.java и реализуйте метод с нужным вам параметром. Например, вам нужно 2 параметра для обновления вашего VO:

 public class YourViewObjectViewImpl extends ViewObjectImpl {

    // Generated method
    public void setA(Long value) {
        setNamedWhereClauseParam(value);
    }

    // Generated method
    public void setB(Long value) {
        setNamedWhereClauseParam(value);
    }

    // Your custom method
    public void refreshQuery(long a, long b) {
        this.clearCache();
        setA(a);
        setB(b);
        this.executeQuery();
    }
}
  

Теперь вам нужно сделать этот метод видимым для ViewController. На вкладке java в вашем определении ViewObject нажмите «Редактировать» в «клиентском интерфейсе» и переместите метод shuttle refreshQuery в правую сторону. Нажмите OK. Теперь Jdev генерирует два класса, которые помогут вам сделать ваш метод видимым в проекте ViewController.

Следующий шаг — определить ваш refreshQuery в привязках определения страницы. Перейдите к определению страницы и нажмите кнопку на панели привязок. Выберите methodAction из списка. Выберите ViewObject из AppModuleDataControl и выберите метод refreshQuery в выпадающем списке Operation. В таблице с параметрами вы можете определить значения, используя язык выражений. Например #{viewScope.MyBean.a} и #{viewScope.MyBean.b} Нажмите ok.

Теперь вы можете выполнить этот метод, например, из компонента:

 public class MyBean {
    public Long a = 0;
    public Long b = 0;

    public void refresh() {
        a = 1;
        b = 2;
        BindingContext bc = BindingContext.getCurrent();
        DCBindingContainer dcbc = (DCBindingContainer)bc.getCurrentBindingsEntry();
        dcbc.getOperationBinding("refreshQuery");
        dcbc.execute();
    }    
}