Главная > OA Framework > OAF: Controller


OAF: Controller

Oracle Application Framework Controller это простой java класс, являющийся подклассом oracle.apps.fnd.framework.webui.OAControllerImpl.

В контроллере можно определить:
1) реакция на действия пользователя на странице
2) инициализация или изменение свойств элементов страницы (web beans)

Пример java класса контроллера:

package xx.oracle.apps.xx.webui; //путь к java классу
// пути к используемым java классам
import oracle.apps.fnd.framework.webui.OAControllerImpl;
import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.webui.beans.OAWebBean;

public class XX_TestCO extends OAControllerImpl //расширение класса OAControllerImpl

{
  public XX_TestCO() // конструктор
  {
  }
  // вызывается один раз, при инициализации страницы
  public void processRequest(OAPageContext oapagecontext, OAWebBean oawebbean)
  {
      // вызов основного метода
      super.processRequest(oapagecontext, oawebbean);
      // далее наш код
      // ...
  }

  // Вызывается при осуществлении действий на странице
  public void processFormRequest(OAPageContext oapagecontext, OAWebBean oawebbean)
  {
      // вызов основного метода
      super.processFormRequest(oapagecontext, oawebbean);
      // далее наш код
      // ...
  }
}

Каким образом осуществляется вызов класса:

1) Браузер выполняет запрос к странице

2) Вызывается oracle.apps.fnd.framework.webui.OAPageBean (основной класс для работы с OAF страницами ).

3) OAPageBean используя название страницы определяет нужный application module.

4) Application module проверяет JDBC connection из connection pool

5) Определяется контекст транзакции

6) Проводится проверка сессии. Если сессия умерла, отображается страница ввода логина и пароля

7) Если сессия пользователя корректна, OAPageBean начинает обрабатывать параметры запроса, определяя HTTP POST или GET

GET Request

1) OAPageBean вызывает  processRequest(). Метод контролерра, который связян с верхним элементом страницы (top-level pageLayout bean)

2) Спускаясь вниз по иерархии страницы вызываются все processRequest из связанных контроллеров.

3) OAPageBean строит XML структуру (UIX) для отображния данных и отправляет браузеру.

POST Request

1) OAPageBean проверяет web bean иерархию в памяти. Если не находит пытается пересоздать иерархию методом описаном выше (GET Request)

2) OAPageBean вызывает processFormData() согласно иерархии страницы.

3) Если происходит исключение, обработка останавливается и пользователю выводится сообщение об ошибке.

4) Если отсутствуют переходы на другую страницу, то страница обновляется и отправляется пользователю.

Как создать контроллер

1) Новый контроллер можно создать через контекстное меню элемента типа region.  Пункт меню «Set New Controller»

 

2) Расширить существующий или создать новый контроллер можно через контекстное меню проекта «New Java Class»

Похожие записи:

  1. computer technician
    11 Январь 2011 в 18:53 | #1

    this post is very usefull thx!

  2. maria andros
    25 Январь 2011 в 11:10 | #2

    It’s not that I want to duplicate your internet site, but I really like the design. Could you tell me which theme are you using? Or was it tailor made?

  3. rudev
    25 Январь 2011 в 12:20 | #3

    @maria andros
    Using theme «iNove 1.4.6 от mg12». The theme is slightly customized.

  4. Arman
    20 Апрель 2012 в 06:41 | #4

    Привет!
    У меня два вопроса
    1. Как сделать так чтобы страница или регион (PPR) автоматически периодически обновлялась?
    2. На странице есть кнопка, при нажатии на кнопку запускает некий процесс, который должен продолжаться даже после того как пользователь вышел из системы. А при следующем входе считать текущее состояние процесса и может нажать на кнопку чтобы остановить. Что это должен быть за процесс? Подскажите пожалуйста куда смотреть?

  5. Arman
    20 Апрель 2012 в 06:43 | #5

    и еще. Это не должна быть параллельная программа.

  6. 20 Апрель 2012 в 11:43 | #6

    @Arman

    1) Обновление страницы OAF обычно реализуется по кнопке.
    Но можно попробовать следущий способ через JavaScript

    OABodyBean bodyBean = (OABodyBean) oapagecontext.getRootWebBean();
    String javaS = "javascript:setTimeout('window.location.reload()',10000)";
    bodyBean.setOnLoad(javaS);
    

    2) В OEBS используются именно параллельные программы. Но можно, например, использовать job.

  7. Arman
    23 Апрель 2012 в 06:37 | #7

    Спасибо! Попробую

  8. Fire
    9 Апрель 2014 в 18:37 | #8

    Добрый день.
    Подскажите пожалуйста. Я делаю extend на штатный контроллер. Он в свою очередь является экстендом ещё одного штатного контроллера. Моя задача: если определенные поля на форме пустые, вывести сообщение об ошибке и не дать сохранить форму. С полями у меня все получилось, персонализацией подключил свой контроллер, ошибку выдаю так:

    OAException message = new OAException(pageContext.getMessage("XXT", "XXT_Error", null),OAException.ERROR); 
                    pageContext.putDialogMessage(message);

    Проблема состоит в том, что несмотря на то что ошибка выводится, форма сохраняется и очевидно, продолжается выполнение контроллера на который я делаю экстенд. Подскажите как можно прервать выполнение формы в таком случае?

  9. Fire
    10 Апрель 2014 в 18:28 | #9

    @Fire
    Разобрался. Может кому пригодится. Метод super.processFormRequest(pageContext, webBean); вызывает выполение кода того контроллера, на который делается экстенд. Соответственно в моем случае вызов штатного контроллера нужно было выполнять только после проверки необходимых мне условий.

  1. 21 Октябрь 2010 в 13:02 | #1