2015-06-23 2 views
0

У меня есть страница, которая программно отображает всплывающее окно в методе бэк-компонента. Всплывающее окно задает пользователю вопрос «Да/Нет», а последующий логический путь определяется их ответом. Однако независимо от того, отображается ли всплывающее окно или нет, в первую очередь условно. Кроме того, в исходном методе есть дополнительная логика, за пределами логики всплывающих окон, которая должна быть завершена.Обработка условного диалога/всплывающей логики в Oracle ADF

Проблема заключается в том, что АПД, похоже, вытесняет всплывающее окно в другой поток и продолжает выполнять логику в оригинальном методе одновременно, ожидая ответа пользователя. Однако желаемый эффект заключается в том, что программа останавливается, пока пользователь не ответит на вопрос во всплывающем окне.

Я не смог найти элегантный способ сделать это возможным. В идеале я считаю, что решение состоит в том, чтобы инкапсулировать логику, которая возникает после того, как всплывающее окно отображается (или не показано) в исходном методе и вызывает его из прослушивателя действий всплывающего окна, если всплывающее окно отображается (иначе его можно использовать из исходного метода) , Однако логика, подлежащая инкапсуляции, требует использования некоторых локальных переменных, которые были установлены до отображения всплывающего окна. Невозможно получить эти значения в методе прослушивателя popup, чтобы передать их в инкапсулированную логику (помимо создания глобальных статических переменных в компоненте, что кажется плохим решением).

Еще одна идея, которую я имел, - это поднять логику «показать/не показывать всплывающее окно» в поток задач. Тем не менее, кажется, что выполнение этого для каждого отдельного всплывающего окна сделает поток задачи действительно сложным.

Есть ли лучший способ сделать это? Это, должно быть, общая проблема, и кажется, что я ошибаюсь.

ETA: Я попытался настроить свойство ContentDelivery для всплывающего окна на «немедленный» и компонент af: dialog внутри всплывающего окна, поэтому модальное значение «true». Ничто не вызвало желаемого поведения.

ответ

0

Этого не может быть достигнуто с помощью веб-инфраструктуры на стороне сервера.

Для АПД, вы будете иметь различные события для каждого жизненного цикла: 1 - всплывающее окно открытия :: popupFetchListener событие 2 - нажмите на кнопку OK, Cancel кнопки :: DialogListener событие 3 - хит кнопку Esc :: popupCancelledEvent

Вы можете обмениваться данными между этими событиями либо на странице FlowScope, либо в viewScope. Но если вы используете ADF BC, вам может быть лучше использовать переходные атрибуты в View Objects.

Смежные вопросы