2012-02-17 1 views
1

私はバージョン1.8以降のicefaceで作業していましたが、最新のバージョン(3.0)になっています。私は私の問題はバージョンに関連していないと思うが、解決策がある可能性がある。 ICEpushを使用するアプリケーションをプログラミングしています。このモデルは次のようなものです: いくつかのデバイスは、java.net.socket経由でサーバーに接続され、独立したスレッドで実行され、すべてのメッセージがajaxプッシュイベントを引き起こす可能性があります。 PushRenderer.Render( "group")を使用すると、次のような結果になります。 java.lang.RuntimeException:スレッド[172.17.1.49,5、main]に対してFacesContextが存在しません。 SessionRenderer.Render( "group")を使用すると、デバイスのメインページに移動したときに期待どおりに動作し、誰でもリアルタイムで情報がどのように変化するかを見ることができます。私が見つけた問題は、アプリケーションの別のビューに移動しようとすると、非常に遅い方法で実行され、ボタンをクリックした後にボタンが機能しないことがわかります。 ページを更新すると、問題を再現するデバイスのページに移動するまでページが再表示されます。 私はPortableRendererを試しましたが、私がPushRenderer.getPortableRenderer()を使用するとnullPointerExceptionが発生します。 PushRenderer.getPortableRenderer(FacesContext.getCurrentInstance())を使用しようとすると、このメソッドがそのパラメータをServletContextに変更したことがわかります。Icefaces:server push issue

私はあなたにこれを手伝っていただければ幸いです。

ありがとうございます。

答えて

1

あなたはこのように、あなたのFacesContextからのServletContextを取得することができます。顔のコンテキスト内から

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

コールPushRenderer.getPortableRenderer()。たとえば、マネージドBeanのコンストラクターなど。ポータブルレンダラーは、別のスレッドに渡すことができ、後でfacesコンテキスト外で呼び出すことができます。