Как обновить графический интерфейс из другого потока? - PullRequest
2 голосов
/ 13 сентября 2011

У меня проблема с потоками в моем приложении JSF , может быть, кто-нибудь мне поможет.

После запуска я запускаю новый поток, который выполняет некоторые фоновые операции.Этот поток работает в while(true) -loop, но когда он ничего не может сделать, он вызывает wait().Он работает в цикле, потому что после некоторых действий пользователя я должен вызывать notify().

Итак, теперь я хочу выполнить следующее: я хотел бы, чтобы поток информировал основной поток о том, что часть задания завершена,поэтому я могу обновить некоторые элементы в пользовательском интерфейсе.Любые идеи?

Я также хотел бы отобразить FacesMessage, но это невозможно сделать из другого потока (даже с использованием шаблона Observer)

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Вы можете использовать JMS для связи между потоком, который вы запускаете, и вашими управляемыми bean-компонентами, но в остальном вам нужно будет использовать одну из технологий push, как упомянуто выше.

Вы можете использовать компонент опроса primefaces, если этого достаточно, в противном случае единственная технология push, которая работает с jsf, о которой я знаю сейчас, это push icefaces. Primefaces выпускает новый push-компонент на основе веб-сокета, который выглядит так, как будто он будет действительно хорош, но я не верю, что он должен быть закончен в течение нескольких месяцев (он появился в последнем снимке, но не совсем много делаю пока и работает только с jetty8). Вы также можете сделать свое дело с библиотеками комет / атмосферы, но, взглянув на это сам, я могу сказать, что эти решения будут большой работой с вашей стороны, в значительной степени индивидуальной реализацией.

0 голосов
/ 13 сентября 2011

Возможно, вы сможете решить свою проблему с помощью асинхронной фоновой работы с принудительной передачей на стороне сервера ICEfaces.
Просьба взглянуть на http://auctionmonitor.icefaces.org/auctionMonitor/auctionMonitor.jsf для примера технологии push.

Ваш фоновый рабочий поток может выполнить «push», который «уведомит» определенные страницы об обновлении (частично) и отобразит ваше сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...