То, как написан ваш пример кода, не должно работать.Если он работает, то он работает только случайно из-за того, что что-то не работает должным образом.
Независимо от того, какую версию Tomcat вы используете, ui.push()
будет запускать задачу, которая была запланирована с использованием ui.access()
,Вы можете подтвердить это, установив точку останова или заставив обратный вызов распечатать что-то в журнал.Разница между двумя версиями Tomat, скорее всего, связана с тем, как в противном случае ui.push()
ведет себя при запуске непосредственно в обработчике кликов.
ui.push()
предполагается использовать изнутри ui.access()
задач, которые выполняются вфоновые потоки для немедленной отправки ожидающих изменений клиенту.В этом случае метод вызывается не из фонового потока, а из потока запроса (т.е. обработчик щелчка).Кроме того, сон в потоке запроса также проблематичен по многим другим причинам.
Вместо этого структура вашего кода должна напрямую устанавливать счетчик как видимый, а затем планировать поток или таймер для выполнения остальной части работы.и наконец вернемся с нетерпением из обработчика кликов.Затем нить или таймер должны использовать ui.access()
для сокрытия счетчика.Использование ui.push()
не требуется, если вы используете стандартный автоматический режим push вместо PushMode.MANUAL
.