Icefaces: серверная проблема - PullRequest
       3

Icefaces: серверная проблема

1 голос
/ 17 февраля 2012

Я работаю с icefaces начиная с его версии 1.8, и теперь я вхожу в последнюю версию (3.0). Я думаю, что моя проблема не связана с версией, но решение может быть. Я программирую приложение, которое использует ICEpush. Модель такая: Несколько устройств подключены к серверу через java.net.socket и работают в независимом потоке, и каждое сообщение может инициировать событие push ajax. Когда я использую PushRenderer.Render («группа»), я получаю это: java.lang.RuntimeException: FacesContext отсутствует для потока Thread [172.17.1.49,5, main]. Когда я использую SessionRenderer.Render («группа»), он работает должным образом, когда я захожу на главную страницу устройств и вижу, как информация меняется в реальном времени для всех. Проблема, которую я нахожу, заключается в том, что, когда я пытаюсь перейти к другому представлению в моем приложении, я вижу, что это делается очень медленно, и кнопки после нажатия на них не работают. Когда я обновляю страницу, они снова начинают работать, пока я не перехожу на страницу устройств, где снова возникает проблема. Я пытался с PortableRenderer, но если я использую PushRenderer.getPortableRenderer (), я получаю исключение nullPointerException; и, если попытаться использовать PushRenderer.getPortableRenderer (FacesContext.getCurrentInstance ()), я обнаружу, что этот метод изменил свой параметр на ServletContext, и я не знаю, где его найти.

Надеюсь, вы поможете мне с этим.

спасибо заранее.

Ответы [ 2 ]

1 голос
/ 11 июня 2014

Позвоните PushRenderer.getPortableRenderer() из контекста лиц. Например, в конструкторе управляемого компонента. Затем переносимый рендер может быть передан другому потоку и вызван позже вне контекста лиц.

1 голос
/ 17 апреля 2012

Вы можете получить ServletContext из вашего FacesContext, например:

ServletContext servletContext = (ServletContext)FacesContext.getCurrentInstance().getExternalContext().getContext();
...