2012-02-17 111 views
1

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

我希望你能帮助我。

在此先感谢。从faces上下文中

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

回答

1

你可以从你的FacesContext得到ServletContext中,像这样的。例如在托管bean的构造函数中。可移植的渲染器可以传递给另一个线程并稍后在faces上下文中调用。

1

呼叫PushRenderer.getPortableRenderer()