Icefaces:服务器推送问题

时间:2012-02-17 18:57:33

标签: jsf-2 icefaces

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

我希望你能帮助我。

提前感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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