После того как на странице происходит операция SUBMIT страница не блокируется, и до того как от сервера будет получен результат, пользователь может взаимодействовать с элементами интерфейса, например повторно нажимать кнопки, ссылки. Это может привести к повторному запуску операции SUBMIT, что в свою очередь запустит параллельное исполнение процессов на стороне сервера и может привести к непредсказуемым последствиям. Как этого избежать?
Способ 1. Свойство страницы "Allow duplicate page submissions"
Самый простой способ избежать такой проблемы, это открыть свойства страницы и в блоке Duplicate Submission установить свойство "Allow duplicate page submissions" в значение "No - Prevent page from being re-posted".
По умолчанию это свойство имеет значение "Yes - Allow page to be re-posted"
Недостаток этого способа в том, что при повторном submit-е вы увидите страницу с ошибкой и сообщением об этом факте.
Способ 2: apex.submit
Другой, более изящный способ, использовать имеющееся API APEX-а apex.submit. В этом случае у пользователя технически не будет возможности что-либо нажимать после submit-а, т.к. вся страница блокируется полу-прозрачным div-ом и поверх рисуется анимированный гиф.
Для применения этого способа, в свойстве Action кнопки, выберите пункт "Redirect to URL" и в свойстве "URL Target" введите:
javascript:apex.submit({request:"MYBUTTON", showWait:true});
Где, MYBUTTON - значение для параметра REQUEST, удобно здесь указывать значение из свойства кнопки "Button Name"
Если необходимо изменить анимированный гиф на другой, то код будет выглядеть немного иначе:
javascript:apex.widget.waitPopup("<img src='ваше_изображение'>"); apex.submit("MYBUTTON");
Варианты изображений из арсенала APEX:
 |
<img src='/i/htmldb/icons/wait.gif'> |
 |
<img src='/i/processing3.gif'> |