@lancehokage

Как сделать redirect из другого потока в JSF Primefaces?

У меня есть некий JSF компонент, хранящий состояние страницы специализаций. На этой странице пользователь выбирает специализацию, а затем ждёт действия со стороны другого пользователя. Так вот, если реализовать это последовательно, юзер зависнет на странице специализаций в бесконечном цикле, который будет проверять, совершено ли действие другим пользователем. Я хочу вынести это действие в другой поток для того чтобы юзер мог продолжать заниматься своими делами на странице, а когда бесконечный цикл в другом потоке завершится происходил редирект.

Проблема в том, что PrimeFacesContext не шарится между потоками (ThreadLocal). И запуская цикл в другом потоке я не могу совершить редирект средствами JSF, поскольку контекст - null.

Я в отдельном потоке запускаю цикл для проверки. И когда this.isAccepted(), пытаюсь делать редирект.

ThreadPoolHolder.addNewTask(() -> {
            try {
                while (true) {
                    if (this.isAccepted()) {
                        PrimeFacesContext.getCurrentInstance().getExternalContext().redirect("/serve");
                        break;
                    }
                }
            } catch (Exception exception) {
                LOG.error("Ошибка в задаче thread pool");
            }
        });


Подскажите пожалуйста, как выйти из этой ситуации? Заранее всем спасибо за помощь.
  • Вопрос задан
  • 39 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
02 мая 2024, в 17:09
50000 руб./за проект
02 мая 2024, в 17:07
20000 руб./за проект
02 мая 2024, в 16:37
500 руб./за проект