Предотвращение повторного SUBMIT страницы
11.03.2018

После того как на странице происходит операция 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'>

 

release 1.0