0

Liferayの同じページで2つのVaadinポートレットを使用しています。最初の行にはエントリのテーブルが表示され、各行にはこのエントリの詳細を表示するボタンがあります。

ボタンがクリックされると、IPCイベントが送信され、2番目のポートレットによって受信されます。2番目のポートレットは、コンテンツを表示するテーブルビューにも切り替わります。

最初のポートレットの閉じるボタンをクリックすると、2番目のポートレットは再びIPCイベントを受信し、元の状態に戻ります。これは、LiferayIPCリスナーのみが接続された空白のビューです。

私の問題は、3回目のクリック後に、Liferayによる非同期エラーが発生することです。ビューが変更されたとき、私は常にそれをメインウィンドウに添付します。そのため、同じ名前のウィンドウを追加することはありません。

ページ上で1つのポートレットのみを使用する場合、問題なく前後に切り替えることができます。ある時点で、ブラウザがクライアント側でイベントを発生させたいのに、IPCがサーバー側ですでになくなっている可能性がありますか?

この問題の原因を特定するのは非常に困難です。

4

1 に答える 1

0

あなたは正しい方向に進んでいます。IPCはクライアント側で機能し、非同期は、存在しないコンポーネントがクライアントからサーバーに呼び出されることによって発生します。

これを引き起こすいくつかのシンがあるかもしれませんが、チェックするいくつかのシナリオ:

  • 表示をクリアする閉じるボタンがあると言います。Application.close()を呼び出すかもしれませんか?これにより、実際には、元のインスタンスの代わりに新しい(サーバー側の)アプリケーションインスタンスが作成されて呼び出される可能性があります。
  • IPCコンポーネントの新しいインスタンスを作成している可能性がありますが、古いインスタンスはまだ登録されており、(存在しないサーバー部分に)何かを送信しようとします。
  • JavaScriptのタイミングの問題により、IPCイベントが予想とは異なる順序で送信される可能性があります。動作が常に一貫している場合、これはありそうもないと思いますが、それでも可能性はあります。

これがケースを少し絞り込んで解決策を見つけるのに役立つことを願っています。この質問を最新の状態に保ちます。

于 2012-08-31T06:25:33.777 に答える