Jsf 2 Icefaces:服务器推送问题

Jsf 2 Icefaces:服务器推送问题,jsf-2,icefaces,Jsf 2,Icefaces,从icefaces 1.8版开始,我就一直在使用它,现在我进入了最新版本(3.0)。我认为我的问题与版本无关,但解决方案可能是。 我正在编写一个使用ICEpush的应用程序。模型是这样的: 几个设备通过java.net.socket连接到服务器,并在独立线程中运行,每条消息都可能触发ajax推送事件。 当我使用PushRenderer.Render(“组”)时,我得到以下结果: java.lang.RuntimeException:线程[172.17.1.49,5,main]不存在FacesCo

从icefaces 1.8版开始,我就一直在使用它,现在我进入了最新版本(3.0)。我认为我的问题与版本无关,但解决方案可能是。 我正在编写一个使用ICEpush的应用程序。模型是这样的: 几个设备通过java.net.socket连接到服务器,并在独立线程中运行,每条消息都可能触发ajax推送事件。 当我使用PushRenderer.Render(“组”)时,我得到以下结果: java.lang.RuntimeException:线程[172.17.1.49,5,main]不存在FacesContext。 当我使用SessionRenderer.Render(“组”)时,当我进入设备的主页时,它会像预期的那样工作,我可以看到每个人的信息是如何实时变化的。我发现的问题是,当我尝试在我的应用程序中导航到另一个视图时,我发现它是以一种非常缓慢的方式完成的,并且在我单击按钮后,按钮不起作用。 当我刷新页面时,它们会重新开始工作,直到我导航到设备页面,再次出现问题。 我尝试过PortableRenderer,但是如果我使用PushRenderer.getPortableRenderer()我会得到一个nullPointerException;如果尝试使用PushRenderer.getPortableRenderer(FacesContext.getCurrentInstance()),我发现该方法已将其参数更改为ServletContext,我不知道在哪里可以找到它

我希望你能帮我做这件事


提前感谢。

您可以从FacesContext获取ServletContext,如下所示:

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

在faces上下文中调用
PushRenderer.getPortableRenderer()
。例如,在托管bean的构造函数中。可移植渲染器随后可以传递到另一个线程并在faces上下文之外调用