#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();
}
}